我希望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_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方法允许谷歌错误。
有什么想法吗?
由于
答案 0 :(得分:4)
使用GET请求而不是POST请求。也就是说,摆脱
curl_setopt($ch, CURLOPT_POST, true);
甚至更好,使用他们的well defined search API代替屏幕抓取。
答案 1 :(得分:4)
抓取Google是一件非常容易的事情。但是,如果您不需要超过前30个结果,则search API更可取(正如其他人所建议的那样)。否则,这是一些示例代码。我已经从我正在使用的几个类中删除了它,因此它可能不是完全正常的,但你应该明白这一点。
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->_helpers->url->buildQuery()
与http_build_query
相同,只是它会删除空参数。
答案 2 :(得分:3)
使用Google Ajax API。
http://code.google.com/apis/ajaxsearch/
请参阅this thread了解如何获取结果数量。虽然它引用了c#库,但它可能会给你一些指示。
答案 3 :(得分:-1)
在废弃数据之前,请先阅读https://support.google.com/websearch/answer/86640?rd=1
反对谷歌条款
自动流量包括:
从机器人,计算机程序,自动服务或搜索刮刀发送搜索 使用向Google发送搜索的软件,查看网站或网页在Google上的排名
答案 4 :(得分:-4)
CURLOPT_CUSTOMREQUEST => ($职位)? “POST”:“GET”