使用PHP抓取Google搜索

时间:2013-01-27 20:43:26

标签: php javascript google-api web-crawler

我试图了解如何使用PHP或JavaScript获取Google搜索结果。我知道以前有可能,但现在我找不到办法了。

我试图复制(某种程度上)
的功能  http://www.getupdated.se/sokmotoroptimering/seo-verktyg/kolla-ranking/

但我真正想要解决的核心问题只是通过PHP或JavaScript获取搜索结果,其余的我可以理解。

使用file_get_contents()或cURL获取结果似乎不起作用。

示例:

$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, 'http://www.google.se/#hl=sv&q=dogs');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$result = curl_exec($ch);
curl_close($ch);
echo '<pre>';
var_dump($result);
echo '</pre>';

结果:

  

string(219)&#34; 302已移动文档已移至此处。&#34;

所以,通过一些谷歌搜索我找到http://code.google.com/apis/customsearch/v1/overview.html,但这似乎只适用于生成一个或多个网站的自定义搜索。 它似乎需要一个&#34;自定义搜索引擎&#34; cx参数已通过。

无论如何,任何想法?

3 个答案:

答案 0 :(得分:8)

我之前做过。通过发出https://www.google.co.in/search?hl=en&output=search&q=india http请求生成html内容,现在使用htmldom php库解析特定标记。您可以使用PHP SIMPLE HTML DOM

解析结果页面的内容
  

DEMO:下面的代码会为您提供所有结果的标题:

<?php

include("simple_html_dom.php");

$html = file_get_html('http://www.google.co.in/search?hl=en&output=search&q=india');

$i = 0;
foreach($html->find('li[class=g]') as $element) {
    foreach($element->find('h3[class=r]') as $h3) 
    {
        $title[$i] = '<h1>'.$h3->plaintext.'</h1>' ;
    }
       $i++;
}
print_r($title);

?>

答案 1 :(得分:1)

a github package named google-url来完成这项工作。

api使用起来非常舒服。参见示例:

// this line creates a new crawler
$googleUrl=new \GoogleURL\GoogleUrl();
$googleUrl->setLang('en'); // say for which lang you want to search (it could have been "fr" instead)
$googleUrl->setNumberResults(10); // how many results you want to check
// launch the search for a specific keyword
$results = $googleUrl->search("google crawler");
// finaly you can loop on the results (an example is also available on the github page)

但是你必须考虑在每个查询之间使用延迟,否则谷歌会将你视为机器人,并要求你提供一个可以锁定脚本的验证码。

答案 2 :(得分:0)

奇。因为如果我从命令中执行curl,就像我得到200 OK

一样
curl -I 'http://www.google.se/#hl=sv&q=dogs'
HTTP/1.1 200 OK
Date: Sun, 27 Jan 2013 20:45:02 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
Set-Cookie: PREF=ID=b82cb66e9d996c48:FF=0:TM=1359319502:LM=1359319502:S=D-LW-_w8GlMfw-lX; expires=Tue, 27-Jan-2015 20:45:02 GMT; path=/; domain=.google.se
Set-Cookie: NID=67=XtW2l43TDBuOaOnhWkQ-AeRbpZOiA-UYEcs7BIgfGs41FkHlEegssgllBRmfhgQDwubG3JB0s5691OLHpNmLSNmJrKHKGZuwxCJYv1qnaBPtzitRECdLAIL0oQ0DSkrx; expires=Mon, 29-Jul-2013 20:45:02 GMT; path=/; domain=.google.se; HttpOnly
P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
Server: gws
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Transfer-Encoding: chunked

另外,也许可以考虑为传递的URL设置urlencode,这一行:

curl_setopt($ch, CURLOPT_URL, 'http://www.google.se/#hl=sv&q=dogs');

对此的更改:

curl_setopt($ch, CURLOPT_URL, 'http://www.google.se/' . urlencode('#hl=sv&q=dogs'));