有人可以帮助我。
我正试图从一个页面中获取多个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>
PHP 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()
有人可以帮助我,谢谢
答案 0 :(得分:1)
$link = $div->getElementsByTagName('a');
检索项目列表,但您无法获得属性值&#34; href&#34;的...
尝试使用$link[0]
代替$link
答案 1 :(得分:1)
你正在测试div有link__tt
类,但是只测试每个所有div。只从拥有该类的div中获取锚点
然后,您尝试从getAttribute
调用DOMNodeList
,您需要获取基础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");
}
答案 2 :(得分:0)
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);
array(2) {
[0]=>
string(24) "/watch-link-53767-934537"
[1]=>
string(24) "/watch-link-53759-934537"
}