Использование CURL с Google

Я хочу использовать 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 Method Allowed google error.

Есть идеи?

благодаря

Solutions Collecting From Web of "Использование CURL с Google"

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

 curl_setopt($ch, CURLOPT_POST, true); 

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

Ломать 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 за исключением того, что он http_build_query пустые параметры.

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

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

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

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

Против условий google

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

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

CURLOPT_CUSTOMREQUEST => ($ post)? «POST»: «GET»