租约请注意我的问题专门针对“简单HTML DOM库”! 有3k +代码行,我没兴趣使用不同的解析器。
参考资料可以在这里找到: “如何在http://simplehtmldom.sourceforge.net/manual.htm
找到HTML元素”使用以下代码,我尝试从各种div
元素中提取主页网址。
定义后代选择器div[...] li a
很简单。但是为了缩小到主页,我尝试了:
li
元素...通过索引(见下文,导致错误“试图获取非对象的属性”)label=Internet:
进入代码不幸的是我没有成功:)
所需输出
http://www.someurl.com/
http://www.anotherurl.com/
不起作用的代码
foreach($html->find('div[class=contact-data] li a', 6) as $element_details) {
// variable $html contains the Input listed below
// Output $element_details
}
输入(存储在变量$ html中)
<div class="contact-data">
<ul class="plain-list">
<li>
Somestreet 18</li>
<li>
88888
Somecity</li>
<li>
<label>
Tel:</label>123/123456</li>
<li>
<label>
Fax:</label>123/123457</li>
<li>
<label>
E-Mail:</label><a href="http://www.somesite.com/de/Service/ContactParam?mail_pnr=000290080" onclick="">Contact</a></li>
<li>
<label>
Internet:</label><a href="http://www.someurl.com/">Homepage</a></li>
<li>
<div style="margin-left: 0px">
</div></li>
</ul>
</div>
<div class="contact-data">
<ul class="plain-list">
<li>
Anotherstreet 68</li>
<li>
88888
Anothercity</li>
<li>
<label>
Tel:</label>123/123447</li>
<li>
<label>
Fax:</label>123/123458</li>
<li>
<label>
E-Mail:</label><a href="http://www.anothersite.com/de/Service/ContactParam?mail_pnr=000570030" onclick="">Contact</a></li>
<li>
<label>
Internet:</label><a href="http://www.anotherurl.com/">Homepage</a></li>
<li>
<div style="margin-left: 0px">
</div></li>
</ul>
</div>
答案 0 :(得分:2)
经过测试和运作的代码
<?php
include "simplehtmldom/simple_html_dom.php";
$str = <<<HTML
<div class="contact-data">
<ul class="plain-list">
<li>
Somestreet 18</li>
<li>
88888
Somecity</li>
<li>
<label>
Tel:</label>123/123456</li>
<li>
<label>
Fax:</label>123/123457</li>
<li>
<label>
E-Mail:</label><a href="http://www.somesite.com/de/Service/ContactParam?mail_pnr=000290080" onclick="">Contact</a></li>
<li>
<label>
Internet:</label><a href="http://www.someurl.com/">Homepage</a></li>
<li>
<div style="margin-left: 0px">
</div></li>
</ul>
</div>
<div class="contact-data">
<ul class="plain-list">
<li>
Anotherstreet 68</li>
<li>
88888
Anothercity</li>
<li>
<label>
Tel:</label>123/123447</li>
<li>
<label>
Fax:</label>123/123458</li>
<li>
<label>
E-Mail:</label><a href="http://www.anothersite.com/de/Service/ContactParam?mail_pnr=000570030" onclick="">Contact</a></li>
<li>
<label>
Internet:</label><a href="http://www.anotherurl.com/">Homepage</a></li>
<li>
<div style="margin-left: 0px">
</div></li>
</ul>
</div>
HTML;
$html= str_get_html($str);
// Find the divs
foreach($html->find('div[class="contact-data"]') as $div)
{
// Find the listing at the 6th,
// however simplehtmldom counts from 0
$li = $div->find('ul li', 5);
// Find the link
$link = $li->find('a', -1);
// Test if element exist and print if yes
if(!is_null($link))
echo $link->href . "\n";
}
在foreach
上使用$html->find
时,您无法使用索引,也无法使用单个项目。
首先我们foreach
div
s,然后是单li
(应该是第6个,但它似乎从0开始计数,所以它从5开始)来自如果我们打印出null
没有null
,我们会找到该链接并检查是否为anchor
。
输出是:
http://www.someurl.com/
http://www.anotherurl.com/
如果你想要你可以恢复它:
$link = $div->find('ul li', 5)->find('a', -1);