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



我的目标是用PHP简单的HTML DOM解析器抓取搜索结果这对我来说工作正常。但是每隔一两天,谷歌就会改变他们的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链接结构

我遇到了同样的问题。尝试

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

它会再次工作。

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

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

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

最新更新