我尝试了以下代码:
$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);