Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 谷歌允许一个请求刮取多少结果?_Php_Scrape - Fatal编程技术网

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

Php 谷歌允许一个请求刮取多少结果?,php,scrape,Php,Scrape,下面的PHP代码工作得很好,但是当它用于为指定的关键字刮取1000个Google结果时,它只返回100个结果。谷歌对返回的结果有限制吗,还是有不同的问题 <?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");

下面的PHP代码工作得很好,但是当它用于为指定的关键字刮取1000个Google结果时,它只返回100个结果。谷歌对返回的结果有限制吗,还是有不同的问题

<?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++;
        }
?>

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

正如您在“搜索设置”页面上看到的,最多100个项目:

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

。。。这是不允许刮谷歌的结果

谷歌提供了一个

示例代码(REST):

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

。你可以刮零页

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)..."

你可以尝试逃避他们的侦查机制;谷歌搜索“刮谷歌搜索”发现了几种建议的技术。但谷歌并不支持这一点。

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

正如人们所指出的,谷歌不喜欢被刮。这是他们的条款所不允许的,所以如果你同意他们,你可以通过自动访问网站来打破他们。 然而,谷歌本身并不关心网站启动时的访问权限。 即使Bing是由谷歌提供动力的,而且被发现这样做,我想大多数其他搜索引擎也从谷歌那里借来了

如果你一定要抓到谷歌,那就让它的检测率低于谷歌的检测率。不要敲打他们,因为这只会让你的项目停滞不前,谷歌会更加关注自动访问,这会让我们总体上更加困难

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

因此,这有点棘手,但如果您依赖于以这种方式获取数据,请看一下 这是一个PHP代码,它可以刮取多个关键字和多个页面,并管理IP地址,使它们不会被阻止。 我正在项目中使用该代码,到目前为止它仍然有效

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


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

对不起,我不明白您的最后一句话。我如何分别解析10个结果页面。当使用google时,在for循环中有1200(约)个请求,其中一个3个请求。它没有阻挡我。但一旦我将睡眠设置为0,它就会在一些请求后阻止我。现在,即使我将睡眠时间设置为10秒或更多,它也会阻止相同数量的请求。为什么?事实上,在抓取较大的数字时,您可能必须将IP上的请求速率降低到每小时10个以下。但谷歌有时会被攻击,它的抓取响应会有延迟,这可能会导致突发事件的发生,但你会在晚些时候受到更高的检测率的影响。
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)..."