将CURL与Google结合使用

时间:2010-06-03 18:51:32

标签: php curl

我希望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方法允许谷歌错误。

有什么想法吗?

由于

5 个答案:

答案 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”