Je voudrais gratter le contenu de cette page de résultats de recherche Google en utilisant curl. J'ai essayé de définir différents agents utilisateurs et d'autres options, mais je n'arrive tout simplement pas à obtenir le contenu de cette page, car je suis souvent redirigé ou une erreur "page déplacée".
Je pense que cela a quelque chose à voir avec le fait que la chaîne de requête est encodée quelque part mais je ne sais pas vraiment comment contourner cela.
//$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);
Que dois-je faire pour que mon code php affiche le contenu exact de la page tel que je le verrais sur mon navigateur? Qu'est-ce que je rate? Quelqu'un peut-il m'indiquer la bonne direction?
J'ai vu des questions similaires sur SO, mais aucune avec une réponse qui pourrait m'aider.
MODIFIER:
J'ai essayé d'ouvrir le lien à l'aide du Selenium WebDriver, qui donne les mêmes résultats que cURL. Je pense toujours que cela est dû au fait qu'il y a des caractères spéciaux dans la chaîne de requête qui sont perturbés quelque part dans le processus.
c'est ainsi:
/**
* 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;
}
Exemple
//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'];
Pour une approche réaliste qui imite le comportement le plus humain, vous pouvez ajouter un référent dans vos options de boucle. Vous pouvez également ajouter un follow_location à vos options curl. Croyez-moi, qui a dit que cURLING Google résultats est impossible, est un idiot complet et devrait jeter son ordinateur contre le mur dans l'espoir de ne plus jamais revenir à l'internetz. Tout ce que vous pouvez faire "IRL" avec votre propre navigateur peut être émulé avec PHP cURL ou libCURL en Python. Il vous suffit de faire plus de CURLS pour obtenir un buff. Ensuite, vous verrez ce que je signifier. :)
$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);
Essayez ceci:
$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);
Obtenir du contenu avec Curl php
demande serveur support fonction Curl, activer dans httpd.conf dans le dossier 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;
Si vous obtenez du contenu via Google, utilisez Curl dans le cache, vous pouvez utiliser cette URL: http://webcache.googleusercontent.com/search?q=cache:Put votre url Exemple: http: // urlopener.mixaz.net/
Je suppose que vous avez remarqué que votre lien est en fait un lien HTTPS ... Il semble que les paramètres CURL n'incluent aucun type de traitement SSH ... peut-être que cela pourrait être votre problème. Pourquoi n'essayez-vous pas avec un lien non-HTTPS de voir ce qui se passe (moteur de recherche personnalisé de Google) ...?