Php 在Google中使用CURL

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_

我想转到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方法允许的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”都不需要获得所需的值