通过DomDocument简单的Web抓取获取“隐藏的元素”

时间:2018-11-21 17:10:40

标签: php dom web-scraping

我正在尝试从网站(其中包含值列表及其子列表)中抓取一些数据。但是,子列表是隐藏的,直到我单击它们为止。

我可以使用DomDocument和Xpath轻松获得原始列表项,但不能使用子列表。

我认为子列表是通过Javascript隐藏的,我不知道该如何模拟点击。

如何获取所有列表值?

这里有一张图片供您理解:

Problem explanation throug picture

网站为:http://www.econodata.com.br/lista-empresas/MINAS-GERAIS/BICAS

当前代码:

$mpd = new DOMDocument();
$mainpage = "http://www.econodata.com.br/lista-empresas/MINAS-GERAIS/BICAS";
$mpd->loadHTML((new simple_html_dom())->load(collect_file($mainpage)));
$mpdXpath = (new DOMXPath($mpd));
foreach($mpdXpath->query('//div/ul/li/span') as $topicNode){
    echo $topicNode->textContent;
    echo "<br>";
}

预期的输出是所有子列表(字母编号,例如H49,H-492等,而不仅仅是E,F,G,H ...)

1 个答案:

答案 0 :(得分:1)

所有元素都具有相同的类parent

<span style="float: left !important;" class="parent">A - AGRICULTURA,....</span>

使用xpath //span[@class="parent"]

提取

但是如果您还想提取URL

foreach($mpdXpath->query('//span[@class="parent"]/..') as $topicNode){
    $title = $topicNode->getElementsByTagName('span')[0];
    $href = $topicNode->getElementsByTagName('a')[0];
    echo $title->textContent;
    echo "<br>";
    echo "http://...." . $href->getAttribute('href');
    echo "<br>";
}