谁能帮我一下?
我试图从一个页面获得多个href的例子。
页面
<div class="link__ttl">
<a href="/watch-link-53767-934537" target="_blank" rel="nofollow">Version 1</a>
</div>
<div class="link__ttl">
<a href="/watch-link-53759-934537" target="_blank" rel="nofollow">Version 1</a>
</div>
Dom
$data = array();
$data['links'] = array();
$page = $this->curl->get($page);
$dom = new DOMDocument();
@$dom->loadHTML($page);
$divs = $dom->getElementsByTagName('div');
for($i=0;$i<$divs->length;$i++){
if ($divs->item($i)->getAttribute("class") == "link__ttl") {
foreach ($divs as $div) {
$link = $div->getElementsByTagName('a');
$data['links'][] = $link->getAttribute("href");
}
}
}
但这并不相同的工作,我得到一个错误
Call to undefined method DOMNodeList::getAttribute()
有人能帮我一下吗?谢谢
您正在测试具有link__tt
类的div,但随后仅针对每个div。只从具有该类的div中获取锚。
然后您尝试从DOMNodeList
调用getAttribute
,您需要获得底层domnode以获取属性。
$divs = $dom->getElementsByTagName('div');
for($i=0;$i<$divs->length;$i++){
$div = $divs->item($i);
if ($div->getAttribute("class") == "link__ttl") {
$link = $div->getElementsByTagName('a');
$data['links'][] = $link->item(0)->getAttribute("href");
}
}
另一个解决方案是使用xpath
$path = new DOMXPath($dom);
$as = $path->query('//div[@class="link__ttl"]/a');
for($i=0;$i<$as->length;$i++){
$data['links'][] = $as->item($i)->getAttribute("href");
}
http://codepad.org/pX5qA1BB $link = $div->getElementsByTagName('a');
检索的项目列表,你不能得到一个属性值"href"的…
尝试使用$link[0]
代替$link
DOM的任何部分都是一个节点。属性也是节点,而不仅仅是元素。使用Xpath可以直接获取href属性节点的列表。
$dom = new DOMDocument();
$dom->loadHtml($html);
$xpath = new DOMXpath($dom);
$result = [];
foreach ($xpath->evaluate('//div[@class = "link__ttl"]/a/@href') as $href) {
$result[] = $href->value;
}
var_dump($result);
输出:https://eval.in/150202
array(2) {
[0]=>
string(24) "/watch-link-53767-934537"
[1]=>
string(24) "/watch-link-53759-934537"
}