php - DOM结构,通过属性名/值获取元素

标签 php dom curl getelementsbytagname

我在 SO 上看到很多与问题相关的答案,但要么存在我无法克服的细微差异,要么我只是无法重复显示的过程。

我想要完成的是使用 CURL 从 Google+ 业务页面获取 HTML,迭代 HTML 并针对业务的每次评论抓取评论 HTML 以显示在该业务非 google+ 网页上。

每条评论都共享这个父 div 结构:

<div class="ZWa nAa" guidedhelpid="userreviews"> .....

因此,我正在尝试基于为每个具有属性的 div 查找和抓取 div 和 innerhtml 来执行 foreach 循环:guidehelpid="userreviews"

我通过 CURL 成功获取了 HTML,并且可以在定位标准标签名称(如“a”)时解析它,或者如果它有 ID,但在查找属性名称时使用 PHP 默认解析器迭代 HTML 是有问题的:

我怎样才能使用下面这个成功的代码并使其像第二个代码中所示的预期那样工作,这当然是错误的?

工作代码(查找、获取、回显 $output 中的所有“a”标签)

$url = "https://plus.google.com/+Mcgowansac/about";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$output = curl_exec($curl);
curl_close($curl);
$DOM = new DOMDocument;
@$DOM->loadHTML($output);


foreach($DOM->getElementsByTagName('a') as $link) {
        # Show the <a href>
        echo $link->getAttribute('href');
        echo "<br />";}

理论上需要的代码:(通过 HTML 中的自定义属性查找每条评论并回显它们)

$url = "https://plus.google.com/+Mcgowansac/about";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$output = curl_exec($curl);
curl_close($curl);
$DOM = new DOMDocument;
@$DOM->loadHTML($output);


foreach($DOM->getElementsByTagName('div[guidehelpid=userreviews]') as $review) {
        echo $review;
        echo "<br />"; }

任何帮助我纠正这个问题的人都将不胜感激。如果没有它我也能做到这一点,我宁愿不使用“simple_html_dom”。

最佳答案

我建议您也可以在这种情况下使用 DOMXpath。示例:

$url = "https://plus.google.com/+Mcgowansac/about";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$output = curl_exec($curl);
curl_close($curl);

$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHTML($output);
libxml_clear_errors();
$xpath = new DOMXpath($dom);

$review = $xpath->query('//div[@guidedhelpid="userreviews"]');

if($review->length > 0) { // if it exists
    echo $review->item(0)->nodeValue;
    // echoes
    // John DeRemer reviewed 3 months ago Last fall, we had a major issue with mold which required major ... and so on
}

关于php - DOM结构,通过属性名/值获取元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25613239/

相关文章:

其他闭包中的 PHP 闭包 : scope of "use"

php - 在数据库模式中实现标签

javascript - 即 8 : remove node keep children

c# - 强制将 XML 字符实体放入 XmlDocument 中

json - 类似 curl 的 Golang JSON/HTTP 请求

facebook - 为什么查找 ssl 证书的 curl 失败会间歇性地工作?

php - 为 Codeigniter 服务器安装 Bonfire 和安装链接问题

php - array_intersect 可变数量的数组

javascript - 如何从具有一个或多个类名的元素中查找恰好具有特定且唯一的类名(而不是任何其他类名)的元素?

http - 为 golang 请求设置标志