2013-02-19 3 views
23

Я хотел бы очистить содержимое этого Google search result page с помощью curl. Я пытался настроить разные пользовательские агенты и устанавливать другие параметры, но я просто не могу получить содержимое этой страницы, так как меня часто перенаправляют или я получаю сообщение об ошибке страницы.Как получить содержимое страницы с помощью cURL?

Я считаю, что это связано с тем, что строка запроса закодирована где-то, но я действительно не уверен, как обойти это.

//$url is the same as the link above 
    $ch = curl_init(); 
    $user_agent='Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0' 
    curl_setopt ($ch, CURLOPT_URL, $url); 
    curl_setopt ($ch, CURLOPT_USERAGENT, $user_agent); 
    curl_setopt ($ch, CURLOPT_HEADER, 0); 
    curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt ($ch,CURLOPT_CONNECTTIMEOUT,120); 
    curl_setopt ($ch,CURLOPT_TIMEOUT,120); 
    curl_setopt ($ch,CURLOPT_MAXREDIRS,10); 
    curl_setopt ($ch,CURLOPT_COOKIEFILE,"cookie.txt"); 
    curl_setopt ($ch,CURLOPT_COOKIEJAR,"cookie.txt"); 
    echo curl_exec ($ch); 

Что мне нужно сделать, чтобы получить мой PHP код, чтобы показать точное содержание страницы, как хотелось бы видеть на моем браузере? Что мне не хватает? Может ли кто-нибудь указать мне правильное направление?

Я видел похожие вопросы на SO, но ни один из них не мог ответить мне.

EDIT:

Я попытался просто открыть ссылку с помощью Selenium WebDriver, что дает те же результаты, как завиток. Я все еще думаю, что это связано с тем, что в строке запроса есть специальные символы, которые где-то запутываются.

+0

$ output = curl_exec ($ ch); echo $ output; –

+0

@BojanKovacevic Я редактировал код, чтобы показать, что я делаю 'echo curl_exec ($ ch);' Я получаю страницу, но не та, которую я запрашиваю. – 7usam

+0

Вы не можете очистить результаты поиска Google - результаты Googles являются их основным IP-адресом, они не собираются его отдать! - независимо от того, что вы делаете с вашим кодом, вы столкнетесь со многими (МНОГО!) другими проблемами, в меньшей степени из которых будет включен черный список. Если вы пытаетесь отслеживать результаты поиска или SEO или аналогичные, используйте надлежащее программное обеспечение для отслеживания, такое как http://www.seomoz.org/ – LuckySpoon

ответ

42

это как:

/** 
    * Get a web file (HTML, XHTML, XML, image, etc.) from a URL. Return an 
    * array containing the HTTP server response header fields and content. 
    */ 
    function get_web_page($url) 
    { 
     $user_agent='Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0'; 

     $options = array(

      CURLOPT_CUSTOMREQUEST =>"GET",  //set request type post or get 
      CURLOPT_POST   =>false,  //set to GET 
      CURLOPT_USERAGENT  => $user_agent, //set user agent 
      CURLOPT_COOKIEFILE  =>"cookie.txt", //set cookie file 
      CURLOPT_COOKIEJAR  =>"cookie.txt", //set cookie jar 
      CURLOPT_RETURNTRANSFER => true,  // return web page 
      CURLOPT_HEADER   => false, // don't return headers 
      CURLOPT_FOLLOWLOCATION => true,  // follow redirects 
      CURLOPT_ENCODING  => "",  // handle all encodings 
      CURLOPT_AUTOREFERER => true,  // set referer on redirect 
      CURLOPT_CONNECTTIMEOUT => 120,  // timeout on connect 
      CURLOPT_TIMEOUT  => 120,  // timeout on response 
      CURLOPT_MAXREDIRS  => 10,  // stop after 10 redirects 
     ); 

     $ch  = curl_init($url); 
     curl_setopt_array($ch, $options); 
     $content = curl_exec($ch); 
     $err  = curl_errno($ch); 
     $errmsg = curl_error($ch); 
     $header = curl_getinfo($ch); 
     curl_close($ch); 

     $header['errno'] = $err; 
     $header['errmsg'] = $errmsg; 
     $header['content'] = $content; 
     return $header; 
    } 

Пример

//Read a web page and check for errors: 

$result = get_web_page($url); 

if ($result['errno'] != 0) 
    ... error: bad url, timeout, redirect loop ... 

if ($result['http_code'] != 200) 
    ... error: no page, no permissions, no service ... 

$page = $result['content']; 
+0

Нет, я перенаправляюсь на главную страницу поиска Google (а не результаты поиска, которые находятся в моем URL-адресе). Так же, как у меня было – 7usam

+0

@ 7usam Я исправляю свой ответ, чтобы использовать только в GET! попробуй! – 2013-02-19 11:13:08

+0

cURL использует GET по умолчанию, если вы не укажете 'CURLOPT_POST' или' CURLOPT_POSTFIELDS'. Пробовал свой код в любом случае, никаких изменений. – 7usam

4

Попробуйте:

$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, urlencode($url)); 
    $response = curl_exec($ch); 
    curl_close($ch); 
+0

Мой URL-адрес запроса немного сложнее вашего. Код работает для простого запроса, как вы предоставили, но не для моего. См. Ссылку в вопросе. – 7usam

+0

@ 7usam У вас возникли проблемы со ссылкой, как вы это сделали? что вы пытаетесь найти? –

+0

@ 7usam исправить мой ответ использовать UrlEncode ($ URL) –

8

Для реалистического подхода, который эмулирует наиболее человеческое поведение, вы можете хотите объявление d референт в ваших вариантах завивки. Вы также можете добавить следующую строку в свои параметры завивки. Поверьте мне, кто бы ни сказал, что результаты CURLING Google невозможны, это полный болван, и он должен бросить свой компьютер на стену в надежде никогда больше не вернуться в интернет. Все, что вы можете сделать «IRL» со своим собственным браузером, можно эмулировать с помощью PHP cURL или libCURL в Python. Вам просто нужно сделать больше cURLS, чтобы получить бафф. Тогда вы увидите, что я имею в виду. :)

$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, urlencode($url)); 
    $response = curl_exec($ch); 
    curl_close($ch); 
+2

Не пробовал код, но отличный пост lol. – Manachi

+1

С 'urlencode()' вокруг всего '$ url', вы в конечном итоге избегаете«: // »и т. Д., Которые cURL не нравится. Чтобы заставить это работать, просто «urlencode ($ strSearch)» в '$ url' и удалите' urlencode() 'из строки' CURLOPT_URL'. –

1

Я полагаю, что вы заметили, что ваша ссылка на самом деле ссылка HTTPS .... Похоже, что параметры CURL не включают в себя какой-либо обработки SSH ... может быть, это может быть ваша проблема , Почему бы вам не попробовать ссылку, отличную от HTTPS, чтобы узнать, что происходит (например, Google Custom Search Engine) ...?

+0

Добро пожаловать в StackOverflow. Вам нужно узнать [как написать хороший ответ] (http://stackoverflow.com/help/how-to-answer). Сначала вы должны посетить [справочный центр] (http://stackoverflow.com/help). Хотя нет ничего плохого, но вы отвечаете на вопрос, который задают почти 2 года назад. – afzalex

1

Получить контент с Curl PHP

поддержка запрос сервера Curl функции, включить в httpd.conf в папке Apache


function UrlOpener($url) 
    global $output; 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $output = curl_exec($ch); 
    curl_close($ch);  
    echo $output; 

Если получить содержимое с помощью кэша Google Curl вы можете использовать этот адрес: http://webcache.googleusercontent.com/search?q=cache:Put ваш url Образец: http://urlopener.mixaz.net/

Смежные вопросы