Я пытаюсь понять, как получить результаты поиска Google с помощью PHP или JavaScript. Я знаю, что это было возможно раньше, но теперь я не могу найти способ.
Я пытаюсь дублировать (несколько) функциональность
http://www.getupdated.se/sokmotoroptimering/seo-verktyg/kolla-ranking/
Но на самом деле основная проблема, которую я хочу решить, – это просто получить результат поиска через PHP или JavaScript, остальное я могу понять.
Получение результатов с помощью file_get_contents () или cURL не работает.
Пример:
$ch = curl_init(); $timeout = 5; curl_setopt($ch, CURLOPT_URL, 'http://www.google.se/#hl=sv&q=dogs'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $result = curl_exec($ch); curl_close($ch); echo '<pre>'; var_dump($result); echo '</pre>';
Результаты:
string (219) "302 Перемещено Документ переместился сюда."
Таким образом, с некоторыми Googling я нашел http://code.google.com/apis/customsearch/v1/overview.html, но, похоже, работает только для создания пользовательского поиска для одного или нескольких веб-сайтов. Похоже, что передан cx-параметр «Custom Search Engine».
Так или иначе, любая идея?
Я сделал это раньше. Создайте html-содержимое, выполнив https://www.google.co.in/search?hl=en&output=search&q=india
http-запрос, теперь анализируйте конкретные теги, используя библиотеку php htmldom. Вы можете анализировать содержимое страницы результатов с помощью PHP SIMPLE HTML DOM
DEMO: ниже код даст вам название всего результата:
<?php include("simple_html_dom.php"); $html = file_get_html('http://www.google.co.in/search?hl=en&output=search&q=india'); $i = 0; foreach($html->find('li[class=g]') as $element) { foreach($element->find('h3[class=r]') as $h3) { $title[$i] = '<h1>'.$h3->plaintext.'</h1>' ; } $i++; } print_r($title); ?>
в<?php include("simple_html_dom.php"); $html = file_get_html('http://www.google.co.in/search?hl=en&output=search&q=india'); $i = 0; foreach($html->find('li[class=g]') as $element) { foreach($element->find('h3[class=r]') as $h3) { $title[$i] = '<h1>'.$h3->plaintext.'</h1>' ; } $i++; } print_r($title); ?>
Существует PHP- пакет github с именем google-url, который выполняет эту работу.
Апи очень удобно использовать. См. Пример:
// this line creates a new crawler $googleUrl=new \GoogleURL\GoogleUrl(); $googleUrl->setLang('en'); // say for which lang you want to search (it could have been "fr" instead) $googleUrl->setNumberResults(10); // how many results you want to check // launch the search for a specific keyword $results = $googleUrl->search("google crawler"); // finaly you can loop on the results (an example is also available on the github page)
Однако вам придется подумать, чтобы использовать задержку между каждым запросом, иначе Google рассмотрит вас как бота и попросит вас об этом, чтобы заблокировать скрипт.
Странный. Потому что, если я сделаю curl
из команды, как я получаю 200 OK
:
curl -I 'http://www.google.se/#hl=sv&q=dogs' HTTP/1.1 200 OK Date: Sun, 27 Jan 2013 20:45:02 GMT Expires: -1 Cache-Control: private, max-age=0 Content-Type: text/html; charset=ISO-8859-1 Set-Cookie: PREF=ID=b82cb66e9d996c48:FF=0:TM=1359319502:LM=1359319502:S=D-LW-_w8GlMfw-lX; expires=Tue, 27-Jan-2015 20:45:02 GMT; path=/; domain=.google.se Set-Cookie: NID=67=XtW2l43TDBuOaOnhWkQ-AeRbpZOiA-UYEcs7BIgfGs41FkHlEegssgllBRmfhgQDwubG3JB0s5691OLHpNmLSNmJrKHKGZuwxCJYv1qnaBPtzitRECdLAIL0oQ0DSkrx; expires=Mon, 29-Jul-2013 20:45:02 GMT; path=/; domain=.google.se; HttpOnly P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info." Server: gws X-XSS-Protection: 1; mode=block X-Frame-Options: SAMEORIGIN Transfer-Encoding: chunked
Также, возможно, подумайте о настройке urlencode
для переданного URL, чтобы эта строка:
curl_setopt($ch, CURLOPT_URL, 'http://www.google.se/#hl=sv&q=dogs');
Изменения к этому:
curl_setopt($ch, CURLOPT_URL, 'http://www.google.se/' . urlencode('#hl=sv&q=dogs'));