无法抓取搜索结果,Google不断更改html结构

时间:2019-05-30 08:43:27

标签: php web-scraping google-search

我的目标是使用PHP Simple HTML DOM解析器抓取搜索结果 这对我来说很好。但是每隔一两天,Google就会更改其HTML结构,而我的代码也会停止工作。

这是我之前运行的代码:

include("simple_html_dom.php");
$data = file_get_contents('https://www.google.com/search?q=stackoverflow');
$html = str_get_html($data);
$i=0;
$linkObjs = $html->find('h3[class=r] a');
foreach ($linkObjs as $linkObj) {
    $i++;
    $url = trim($linkObj->href);
    $trim = substr($url, 0, 7);
    if ($trim=="/url?q=") {
        $url = substr($url, 7);
    }
    $trim_2 = stripos($url, '&sa=U');
    if ($trim_2 != false) {
        $url = substr($url, 0, $trim_2);
    }
    echo "$i:".$url.'<br>';
}

他们通常会更改类名和标记名以及HTML链接结构

2 个答案:

答案 0 :(得分:0)

我有同样的问题。尝试

$linkObjs = $html->find('div[class=jfp3ef] a');

它将再次正常工作。

答案 1 :(得分:-1)

我也有类似的经历。当我从普通用户界面搜索Google时,“命中”页面的URL仍然显示在div类“ r”之后的A标签中(当然)。但是,当我使用完全相同的搜索词和参数运行抓取程序时,“ r”更改为“ kCrYT”。我在代码中进行了更改,并使程序再次运行。 (是的!)

但是我怀疑,当Google检测到有人以编程方式提交搜索时,班级会定期更改。因此,这可能不是永久性的解决方案。

也许我可以添加一些额外的代码来确定当前为此使用的类名,以便我的程序可以自动适应这些更改。