我尝试了以下代码:
$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;
但它显示谷歌主页而不是谷歌搜索结果页面。 帮我解决这个问题。
答案 0 :(得分:12)
我成功地绕过谷歌试图通过以下方式阻止卷曲搜索:
$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内容。
这是针对Google TOS的,请不要滥用;)
[编辑]使用$query = urlencode($query)
答案 1 :(得分:2)
在这个特定情况下,您无法使用,因为Google专门设计了此网址,因此无法使用此网址。您会注意到(正如Quentin所指出的)url使用的是锚字符串,而不是标准的查询字符串语法(变量应该在?
之后,但在这种情况下,它们会在{{1}之后出现})。谷歌有一段javascript抓取锚字符串,然后使用ajax将内容加载到结果框架中。因此,#
和file_get_content
无法从此网址获取结果。
还有其他地方可以传递正确的查询字符串:
它可以获取,但这几乎肯定违反了谷歌的TOR,所以谨慎行事。此外,还有一项付费的Google服务,可让您轻松完成此操作,而且不会有任何令人讨厌的诉讼威胁。
答案 2 :(得分:0)
其他人是正确的警告你检查TOS以及你在网址中使用的锚看起来不正确的事实。但即使该锚不存在,您仍然应该获得主页。所以我认为这可能会导致问题:
你确定要使用的代理工作正常吗?在没有这一行的情况下进行测试:
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');
答案 3 :(得分:0)
在以下链接中查看Php Access。
https://developers.google.com/web-search/docs/
$ url =“https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=Paris%20Hilton&userip=USERS-IP-ADDRESS”;
$ ch = curl_init();
curl_setopt($ ch,CURLOPT_URL,$ url);
curl_setopt($ ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ ch,CURLOPT_REFERER,/ *在此输入您网站的网址* /);
$ body = curl_exec($ ch);
curl_close($ CH);
//现在,处理JSON字符串
$ json = json_decode($ body);