Я пробовал следующие коды:
$url = 'http://www.google.co.uk/#q='.$query.'&hl=en&prmd=imvns&source=lnt&tbs=ctr:countryUK%7CcountryGB&cr=countryUK%7CcountryGB&sa=X&psj=1&ei=m65DT_yUAcnG0QX46_yPDw&ved=0CEEQpwUoAQ&bav=on.2,or.r_gc.r_pw.r_cp.,cf.osb&fp=2e9b4f7fb1e75d0d&biw=1440&bih=799'; $ch = curl_init(); curl_setopt($ch, CURLOPT_PROXY, '192.168.0.1:1501'); curl_setopt($ch, CURLOPT_REFERER, 'www.google.com'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, $url); $contents = curl_exec($ch); curl_close($ch); echo $contents;
Но он показывает главную страницу google вместо страницы результатов поиска Google. Помогите решить эту проблему.
Я успешно смог обойти попытку Google предотвратить поиск курсора следующим образом:
$useragent = "Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.14912/870; U; id) Presto/2.4.15"; $ch = curl_init (""); curl_setopt ($ch, CURLOPT_URL, "http://www.google.com/search?hl=en&tbo=d&site=&source=hp&q=".$query); curl_setopt ($ch, CURLOPT_USERAGENT, $useragent); // set user agent curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); echo $output = curl_exec ($ch); curl_close($ch);
Обратите внимание, что пользовательский агент, который я использовал, является старым операционным мини-браузером. таким образом google отображает содержимое html, которое вы можете проанализировать.
ЭТО ПРОТИВ GOOGLE TOS, пожалуйста, не злоупотребляйте;)
[EDIT] использовать $query = urlencode($query)
В этом конкретном случае вы это не сработаете, потому что Google специально разработал этот URL-адрес, чтобы он не был доступен cURL. Вы заметите (как заметил Квентин), что url использует строку привязки, а не стандартный синтаксис строки запроса (переменные должны появиться после ?
Но в этом случае они идут после #
). В Google есть часть javascript, которая захватывает строку привязки, а затем использует ajax для загрузки контента в рамку результатов. file_get_content
и cURL
поэтому бессильны получить результаты от этого URL-адреса.
Существуют и другие места, где вы можете передать правильные строки запросов:
И он будет полезен, но это почти наверняка нарушает TOR Google, поэтому будьте осторожны. Кроме того, есть платная услуга Google, которая позволяет вам делать это легко и без какой-либо угрожающей угрозы судебного процесса.
другие ребята были правы, предупреждая вас проверить TOS и о том, что якорь, который вы используете в URL, выглядит не так. Но даже если этот якорь не существует, вы все равно должны получить главную страницу. Поэтому то, что я думаю, может вызвать проблему:
вы уверены, что прокси-сервер, который вы хотите использовать, работает нормально? выполните тест без этой строки:
curl_setopt($ch, CURLOPT_PROXY, '192.168.0.1:1501');
Кроме того, они могут выполнять некоторые проверки, которые связаны с пользовательским агентом, и вы не предоставляете никакой ценности, поэтому подумайте над добавлением вроде:
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1');
Проверьте доступ Php по следующей ссылке.
https://developers.google.com/web-search/docs/
$ url = " https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=Paris%20Hilton&userip=USERS-IP-ADDRESS ";
$ ch = curl_init ();
curl_setopt ($ ch, CURLOPT_URL, $ url);
curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ ch, CURLOPT_REFERER, / * Введите URL вашего сайта здесь * /);
$ body = curl_exec ($ ch);
curl_close ($ ч);
// теперь обрабатываем строку JSON
$ json = json_decode ($ body);