我想在php中cURL谷歌搜索结果


I want to cURL google search result in php

我尝试了以下代码:

$url = 'http://www.google.co.uk/#q='.$query.'&hl=en&prmd=imvns&source=lnt&tbs=ctr:countryUK%7CcountryGB&cr=countryUK%7CcountryGB&sa=X&psj=1&ei=m65DT_yUAcnG0QX46_yPDw&ved=0CEEQpwUoAQ&bav=on.2,or.r_gc.r_pw.r_cp.,cf.osb&fp=2e9b4f7fb1e75d0d&biw=1440&bih=799';
$ch = curl_init();
curl_setopt($ch, CURLOPT_PROXY, '192.168.0.1:1501');
curl_setopt($ch, CURLOPT_REFERER, 'www.google.com');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$contents = curl_exec($ch);
curl_close($ch);
echo $contents;

但它显示的是谷歌主页,而不是谷歌搜索结果页面。帮我解决这个问题。

我成功地绕过了谷歌阻止curl搜索的尝试:

$useragent = "Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.14912/870; U; id) Presto/2.4.15";
$ch = curl_init ("");
curl_setopt ($ch, CURLOPT_URL, "http://www.google.com/search?hl=en&tbo=d&site=&source=hp&q=".$query);
curl_setopt ($ch, CURLOPT_USERAGENT, $useragent); // set user agent
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
echo $output = curl_exec ($ch);
curl_close($ch);

注意,我使用的用户代理是一个旧的opera迷你浏览器。通过这种方式,谷歌显示了一个可以解析的html内容。

这是针对谷歌的,请不要滥用;)

[EDIT]使用$query = urlencode($query)

在这个特定的例子中,你不会这样做,因为谷歌专门设计了这个URL,使其不能使用cURL。您会注意到(正如Quentin所指出的)url使用的是锚字符串,而不是标准的查询字符串语法(变量应该在?之后,但在本例中它们在#之后)。Google有一段javascript,它获取锚字符串,然后使用ajax将内容加载到结果框架中。CCD_ 4和CCD_。

还有其他地方可以传递正确的查询字符串:

http://www.google.ca/search?q=query+文件类型%3PDF+站点%3your_domain.com&hl=en&num=10&lr=lang_en&ft=i&cr=&safe=图像

它会被获取,但这几乎肯定违反了谷歌的TOR,所以要小心。此外,还有一项谷歌付费服务,可以让你轻松地做到这一点,而不会有任何令人讨厌的诉讼威胁。

其他人警告你检查TOS,以及你在url中使用的锚看起来不对劲,这是对的。但即使这个锚不存在,你仍然应该得到主页。因此,我认为这可能会导致问题:

你确定要使用的代理工作正常吗?在没有以下行的情况下运行测试:

curl_setopt($ch, CURLOPT_PROXY, '192.168.0.1:1501');

此外,他们可能会进行一些涉及用户代理的检查,而你没有提供任何值,所以考虑添加一个类似的:

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1');

在以下链接中检查Php访问。

https://developers.google.com/web-search/docs/

$url="https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=巴黎%20希尔顿酒店;userip=USERS-IP-ADDRESS";

$ch=curl_init();

curl_setopt($ch,CURLOPT_URL,$URL);

curl_setopt($ch,CURLOPT_RETURNTTRANSFER,1);

curl_setopt($ch,CURLOPT_REFERER,/*在此处输入网站的URL*/);

$body=curl_exec($ch);

curl_close($ch);

//现在,处理JSON字符串

$json=json_decode($body);