2

以下 PHP 代码可以正常工作,但是当它用于为指定关键字抓取 1000 个 Google 结果时,它只返回 100 个结果。Google 是否对返回的结果有限制,还是有其他问题?

<?php
require_once ("header.php");
$data2 = getContent("http://www.google.de/search?q=auch&hl=de&num=100&gl=de&ix=nh&sourceid=chrome&ie=UTF-8");
    $dom = new DOMDocument();
    @$dom->loadHtml($data2);
    $xpath = new DOMXPath($dom);

    $hrefs = $xpath->evaluate("//div[@id='ires']//li/h3/a/@href");
    $j = 0;

    foreach ($hrefs as $href)
    {            

        $url = "http://www.google.de/" . $href->value . "";
        echo "<b>";

        echo "$j ";
      echo   $url = get_string_between($url, "http://www.google.de//url?q=", "&sa=");
      echo "<br/>";

      $j++;
        }
?>
4

4 回答 4

4

谷歌允许一个请求抓取多少个结果?

。您可以抓取零页。

Please refer to clause 5.3 of the Google Terms of Service:

"You specifically agree not to access (or attempt to access) 
any of the Services through any automated means (including use 
of scripts or web crawlers)..."

您可以尝试规避他们的检测机制;谷歌搜索“scrape google search”会发现几种建议的技术。但这不是谷歌支持的。

于 2013-01-22T23:44:44.340 回答
4

无论如何,如果您仍在您的项目中,您已经接受了答案:

正如人们所指出的,谷歌不喜欢被刮。他们的条款不允许这样做,因此如果您同意他们,您会通过自动访问该站点来破坏它们。然而,谷歌本身并不关心网站启动时的访问权限。甚至 Bing 是由谷歌提供支持并被抓到这样做的,我想大多数其他搜索引擎也从谷歌借用。

如果您必须抓取 Google,请将比率保持在其检测率以下。不要锤他们,因为这只会让你的项目扎根,而且谷歌会更加关注自动访问,这通常会让我们更难。

根据我的经验,您可以以每小时 15 到 20 个请求(使用一个 IP)的速度长期访问 Google,而不会被阻止。当然,您的代码需要模拟浏览器并正常运行。较高的费率会让您首先(通常)被临时验证码阻止。解决验证码会创建一个允许您继续的 cookie。我见过长期的验证码,也见过一个 IP 和大型子网的永久块。所以规则#1:不要被检测到,如果你被检测到然后自动停止你的刮刀。

所以这有点棘手,但如果你依赖于以这种方式获取数据,请查看http://scraping.compunect.com/上的开源 PHP 项目, 这是一个可以抓取多个关键字和多个页面的 PHP 代码并管理 IP 地址,使其不会被阻止。我正在将该代码用于项目,它到目前为止有效。

如果你只需要从谷歌收集少量数据,而真正的排名并不重要,看看他们的 API。如果排名很重要,或者如果您需要大量数据,您将需要像我链接的那样的谷歌刮板。

顺便说一句,PHP 非常适合该任务,但您应该将其作为本地脚本运行,而不是通过 Apache。

于 2014-03-28T02:19:20.493 回答
2

由于您正在解析实际网站的 HTML,因此不要期望它仅仅因为更改单个参数而返回任意数量的结果。

正如您在搜索设置页面上看到的那样,最多 100 个项目: https ://www.google.com/preferences?hl=en

如果您需要 1000 个结果,则必须分别解析前 10 个结果页面。

于 2013-01-22T23:37:33.767 回答
1

... 不允许抓取 Google 结果...

Google 提供免费且干净的搜索 API

示例代码(REST):

GET https://www.googleapis.com/customsearch/v1?parameters
于 2013-01-22T23:41:09.773 回答