PHP Dom从类中获取多个href


PHP Dom Getting Multiple href From Class

谁能帮我一下?

我试图从一个页面获得多个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"
}