Extraire les 100 premiers liens des SERP Google
Il est devenu très difficile de scrapper, d’extraire le contenu -si vous préférez – des pages de résultats du moteur de recherche Google. En anglais, on parle d’ailleurs de SERP, pour Search Engine Results Page. Il m’a fallu trouver un stratagème et, du coup, je suis passé par Startpage dont les résultats sont ceux retournés par Google. Cet excellent moteur de recherche a comme limite de ne pas comprendre les opérateurs de recherche avancés et fort utiles comme (all)inanchor, (all)intext, (all)inurl, link, related, site notamment.
Récupérer le contenu d’un page
En PHP, comme dans bien d’autres langages de programmation, nous disposons d’un module CURL et d’instructions pour effectuer toute sorte de requête. L’un des principaux intérêts de CURL, c’est de nous permettre d’être extrêmement discrets.
La fonction ci-dessous a pour objet de récupérer le contenu d’une page à partir de son adresse. Elle retourne une chaîne de caractères qui représente le code HTML de la page.
function curl($url) { $ua='Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:42.0) Gecko/20100101 Firefox/42.0'; $html=''; $ch = curl_init(); curl_setopt($ch, CURLOPT_USERAGENT,$ua); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); $headers=Array( 'Accept: text/plain', 'Accept-Charset: utf-8', 'Accept-Encoding: compress; gzip; deflate', 'Accept-Language: fr-FR', 'Cache-Control: no-cache', 'Content-Type: text/plain', 'Pragma: no-cache', 'Referer: ', 'User-Agent: '.$ua ); curl_setopt( $ch, CURLOPT_HTTPHEADER,$headers); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt ($ch, CURLOPT_ENCODING, 'gzip,deflate'); if(!curl_errno($ch)) { $html=curl_exec($ch); curl_close($ch); } return $html; }
Elle s’emploie comme suit :
$html=curl('https://www.dsfc.net/');
La fonction de Web Scraping
La 2e fonction a pour objet d’extraire les 100 1ers liens de la page de résultat du moteur Startpage. Utilisant les expressions régulières au travers de la fonction preg_match_all, elle utilise la fonction précédente et renvoie un tableau de liens.
function scrap_google_serp($query) { if(preg_match_all("@<h3 class='clk'><a href='(https?://[^']+)'@isu",curl('https://startpage.com/do/search?lui=francais&language=francais&cat=web&query='.$query.'&prfh=num_of_resultsEEE100N1N'),$matches, PREG_PATTERN_ORDER)) { return($matches[1]); } }
Là-encore, elle s’emploie très simplement. Le tableau $urls, dans l’exemple ci-dessous, contient toute la liste des liens :
$urls=scrap_google_serp('seo'); print_r($urls);
Extraire les titres et les mots-clés des pages des urls collectées
Si vous êtes sage, je vous montrerai la suite dès demain ! ;+)