Я хочу использовать 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.
Есть идеи?
благодаря
Используйте запрос 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»