2013-01-22 18 views
2

下面的PHP代码工作正常,但是当它用于为指定关键字删除1000个Google结果时,它只返回100个结果。 Google对返回的结果有限制吗?还是存在其他问题?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++; 
     } 
?> 

回答

2

您已接受的答案,无论如何,如果你仍然对你的项目:

随着人们注意到,谷歌不喜欢被刮掉。这是他们的条款不允许的,所以如果你同意他们,你可以通过自动访问网站来破解他们。 但是,Google本身并不关心在启动时访问网站的权限。即使Bing是由谷歌提供动力并且被抓住了,我猜大多数其他搜索引擎也向谷歌借款。

如果您必须刮谷歌,请保持低于他们的检测率。不要殴打他们,因为这只会让你的项目停滞不前,谷歌会更加关注自动访问,这会让我们更加困难。

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

所以它有点棘手,但如果你依靠这种方式获取数据,请看http://scraping.compunect.com/ 的开源PHP项目这是一个PHP代码,它可以擦除多个关键字和多个页面并管理IP地址所以他们不会被阻止。 我正在使用该代码的项目,迄今为止工作。

如果您只需要从Google收集少量数据并且真正的排名并不重要,请查看他们的API。如果排名很重要,或者您需要大量数据,那么您需要使用像我链接的Google刮板。

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

2

因为您解析的实际网站的HTML,不要指望它返回结果的任意数量就像改变一个参数的结果。

正如你可以在搜索设置见页,100个项目是最大的: https://www.google.com/preferences?hl=en

如果您需要1000个结果,你将不得不单独解析第10个结果页面。

+0

对不起,你不明白你最后一句话。我如何分别解析10个结果页。 –

0

...它不能凑谷歌搜索结果...

谷歌提供了一个free and clean search API

示例代码(REST):

GET https://www.googleapis.com/customsearch/v1?parameters 
3

多少结果没有谷歌允许请求刮?

Zero。你可以刮零页。

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

您可以尝试逃避其检测机制;谷歌搜索“搜索谷歌搜索”出现了几个建议的技术。但这不是谷歌支持的东西。