如何使用PHP dom内链接抓取HTML


How to webscrape HTML using PHP dom inside links

我有一个关于HTML抓取的问题。

<div class="mbs fwb">
<a href="/groups/291064327770896/" data-hovercard="/ajax/hovercard/group.php?id=291064327770896" aria-owns="js_0" aria-haspopup="true" aria-describedby="js_1" id="js_2">
NCR Business Startups </a>
</div>
<div class="mbs fwb" >
<a href="/groups/Analystamit/" data-hovercard="/ajax/hovercard/group.php?id=158649140871478" aria-owns="js_0" aria-haspopup="true" aria-describedby="js_1" id="js_2">
Risk Professionals </a>
</div>

我需要刮入锚标记data-hovercard字段。

下面是我使用的代码:
include('simple_html_dom.php');
$html = file_get_html('http://sampleurl.com/taki.html');
foreach($html->find('div[class="mbs fwb"]') as $desc11)
foreach($desc11->find('a') as $desc12)
    echo $desc12->data-hovercard . '<br>';

它不工作。我得到的结果:

0
0

我想要这样的结果:

/ajax/hovercard/group.php?id=291064327770896
/ajax/hovercard/group.php?id=158649140871478

使用像/data-hovercard="([^"]*)"/gi;

结果匹配' "'1"将包含该属性的所有值。为了便于整理,您可能需要从源文本中删除换行符。

您可以使用内置的SimpleXMLElement类和XPath查询来做到这一点:

$xml = new SimpleXMLElement('http://foo.bar/baz.html', null, true);
$anchors = $xml->xpath('//div[@class="mbs fwb"]/a');
foreach ($anchors as $a) {
    echo $a['data-hovercard'], PHP_EOL;
}

输出,假设baz.html是包含div的有效HTML文件从问题:

/ajax/hovercard/group.php?id=291064327770896
/ajax/hovercard/group.php?id=158649140871478