Php 在Google中使用CURL
我想转到Google,看看它在某个搜索中返回多少结果 我试过这个:Php 在Google中使用CURL,php,curl,Php,Curl,我想转到Google,看看它在某个搜索中返回多少结果 我试过这个: $url = "http://www.google.com/search?q=".$strSearch."&hl=en&start=0&sa=N"; $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_VERBOSE, 0); curl_setopt($ch, CURLOPT_
$url = "http://www.google.com/search?q=".$strSearch."&hl=en&start=0&sa=N";
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible;)");
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
$response = curl_exec($ch);
curl_close($ch);
但它只返回一个405方法允许的google错误
有什么想法吗
谢谢使用GET请求而不是POST请求。就是,除掉,
curl_setopt($ch, CURLOPT_POST, true);
或者更好的方法是使用他们的API,而不是屏幕抓取。使用Google Ajax API
有关如何获取结果数的信息,请参见。虽然它指的是c#库,但它可能会给你一些提示。放弃谷歌是一件非常容易的事情。但是,如果您不需要超过前30个结果,则最好使用(正如其他人所建议的)。否则,下面是一些示例代码。我已经从我正在使用的几个类中删除了它,所以它可能不是完全功能性的,但是你应该明白
function queryToUrl($query, $start=null, $perPage=100, $country="US") {
return "http://www.google.com/search?" . $this->_helpers->url->buildQuery(array(
// Query
"q" => urlencode($query),
// Country (geolocation presumably)
"gl" => $country,
// Start offset
"start" => $start,
// Number of result to a page
"num" => $perPage
), true);
}
// Find first 100 result for "pizza" in Canada
$ch = curl_init(queryToUrl("pizza", 0, 100, "CA"));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $this->getUserAgent(/*$proxyIp*/));
curl_setopt($ch, CURLOPT_MAXREDIRS, 4);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
注意:
$this->\u helpers->url->buildQuery()
与相同,只是它会删除空参数。CURLOPT\u CUSTOMREQUEST=>($post)?“发布”:“获取”报废数据前请阅读
违反谷歌条款
自动化交通包括:
从机器人、计算机程序、自动服务或搜索刮板发送搜索
使用向谷歌发送搜索的软件,查看网站或网页在谷歌上的排名!当然我想我还是会坚持屏幕抓取。当有一个定义良好的API可以满足您的需要时,为什么还要坚持屏幕抓取,因为屏幕抓取对页面的UI更改很脆弱?该API有一些限制,比如只返回前30个结果。废弃谷歌是一件非常普通的事情。不管是普通还是不普通,这都违反了谷歌的服务条款。也许,也许不是。我的观点是,这样规模和范围的公司应该以身作则。这种可能的重复并不是真正的重复。另一个问题是类似的,但答案完全不同于这篇文章所寻找的。其他问题的答案既不使用CURL,也不使用普通的googlequeryurl.unrelated。他正在尝试卷曲和普通谷歌,因为这是他所知道的。我的意思是,无论是CURL还是“普通的Google查询URL”都不需要获得所需的值