Использование CURL с Google - PullRequest
1 голос
/ 03 июня 2010

Я хочу 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);

Но он просто возвращает ошибку Google 405. Метод разрешен.

Есть идеи?

Спасибо

Ответы [ 5 ]

4 голосов
/ 03 июня 2010

Утилизация Google - это очень простая вещь. Однако, если вам не требуется больше, чем первые 30 результатов, тогда предпочтителен 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 за исключением того, что в нем будут пропущены пустые параметры.

4 голосов
/ 03 июня 2010

Используйте запрос GET вместо запроса POST. То есть избавиться от

curl_setopt($ch, CURLOPT_POST, true);

Или, что еще лучше, используйте их четко определенный API поиска вместо скрининга экрана.

3 голосов
/ 03 июня 2010

Используйте API Google Ajax.

http://code.google.com/apis/ajaxsearch/

См. в этой теме , чтобы узнать, как получить количество результатов. Хотя это относится к библиотекам c #, оно может дать вам несколько указателей.

0 голосов
/ 30 ноября 2014

Перед списанием данных прочитайте https://support.google.com/websearch/answer/86640?rd=1

Против терминов Google

Автоматический трафик включает в себя:

Отправка запросов с помощью робота, компьютерной программы, автоматизированного сервиса или поискового скребка. Использование программного обеспечения, которое отправляет запросы в Google, чтобы узнать, как веб-сайт или веб-страница занимает Google

0 голосов
/ 05 июня 2010

CURLOPT_CUSTOMREQUEST => ($ сообщение)? "ПОЧТА": "ПОЛУЧИТЬ"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...