Scraping google url

- - Dernière réponse : mouloud11
Messages postés
521
Date d'inscription
mardi 22 septembre 2009
Statut
Membre
Dernière intervention
10 novembre 2019
- 10 nov. 2019 à 23:37
Bonjour, je souhaiterais savoir comment récupérer et afficher les dix premières url d'une requête google avec un script php.
Je cherche la solution depuis deux jours mais je ne tombe que sur des script trop anciens pour fonctionner.

Merci d'avance pour votre aide.
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
521
Date d'inscription
mardi 22 septembre 2009
Statut
Membre
Dernière intervention
10 novembre 2019
101
1
Merci
Bonjour MattMax91,

Je t'ai fais un petit script de scrapping rapide très très basique pour récuperer les résultats de Google. Pour des questions d'optimisation je te conseille d'utiliser des regex pour trouver seulement les URL des résultats de Google.
Dans tout les cas mon script te donnera un point de départ, j’ai utilisé la librairie "simple_html_dom" https://simplehtmldom.sourceforge.io/ . Il te suffi de la télécharger et de mettre mon script ci-dessous dans le meme répertoire que la librairie puis d'executer mon script et normalement ça devrait fonctionner.

<?php
require_once('simple_html_dom.php');


function printResult($titlesArray, $linksArray, $result_number){
echo "Total number of links found in the first google page: " . count($titlesArray) . "\n";
echo "Print only " . $result_number . " first results.\n\n";
for ($i = 0; $i <= $result_number; $i++) {
echo "Title: " . $titlesArray[$i] . "\n";
echo "Link: " . $linksArray[$i] . "\n\n";
}
}

function getGoogleResponse($url, $exclusion, $result_number){
$html = file_get_html($url);
$linkObjs = $html->find('a');
$titlesArray = [];
$linksArray = [];

foreach ($linkObjs as $linkObj) {
$title = trim($linkObj->plaintext);
$link = trim($linkObj->href);
if (!in_array($title, $exclusion)){
array_push($titlesArray, $title);
array_push($linksArray, $link);
}
}
printResult($titlesArray, $linksArray, $result_number);

}

$url = 'https://www.google.com/search?q=recherche+a+tester';

$exclusion = ["Google", "ici", "Images", "Shopping", "Livres", "Outils de recherche", "Moins d'une heure", "Moins d'une semaine", "Moins d'un mois", "Moins d'un an", "Connexion", "Suivant >", ">", "Conditions", "Info consommateurs", "", "Maps"];

getGoogleResponse($url, $exclusion, 10);


?>


N'hésite pas si tu as des questions.

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 71315 internautes nous ont dit merci ce mois-ci

Commenter la réponse de mouloud11
0
Merci
Merci bcp mouloud11 pour ton script mais j'aurai un petit problème : les url extraites ne semble pas etre completes à chaque fois (voir résultat du script ci dessous). Comment pourrai je faire pour avoir des url directement à inserer dans mon navigateur

Total number of links found in the first google page: 61 Print only 10 first results. Title: G o o g l e Link: /?sa=X&ved=0ahUKEwjhi4DOtN_lAhVD7eAKHb7TBxAQOwgC Title: G o o g l e Link: /?output=search&ie=UTF-8&sa=X&ved=0ahUKEwjhi4DOtN_lAhVD7eAKHb7TBxAQPAgE Title: Vid�os Link: /search?q=chat&ie=UTF-8&source=lnms&tbm=vid&sa=X&ved=0ahUKEwjhi4DOtN_lAhVD7eAKHb7TBxAQ_AUICSgC Title: Actualit�s Link: /search?q=chat&ie=UTF-8&source=lnms&tbm=nws&sa=X&ved=0ahUKEwjhi4DOtN_lAhVD7eAKHb7TBxAQ_AUICigD Title: Rechercher les pages en Fran�ais Link: /search?q=chat&ie=UTF-8&source=lnt&tbs=lr:lang_1fr&lr=lang_fr&sa=X&ved=0ahUKEwjhi4DOtN_lAhVD7eAKHb7TBxAQpwUIDw Title: Moins de 24�heures Link: /search?q=chat&ie=UTF-8&source=lnt&tbs=qdr:d&sa=X&ved=0ahUKEwjhi4DOtN_lAhVD7eAKHb7TBxAQpwUIEg Title: Mot � mot Link: /search?q=chat&ie=UTF-8&source=lnt&tbs=li:1&sa=X&ved=0ahUKEwjhi4DOtN_lAhVD7eAKHb7TBxAQpwUIFw Title: Wikip�dia Link: /url?q=https://fr.wikipedia.org/wiki/Chat&sa=U&ved=2ahUKEwjhi4DOtN_lAhVD7eAKHb7TBxAQmhMwAnoECAsQBw&usg=AOvVaw2K6cynSEEPbuHrb-Tbu2_c Title: Felidae Link: /search?ie=UTF-8&q=Felidae&stick=H4sIAAAAAAAAAOPgE-LQz9U3MKwsqlACs4wNzHO0hIuLrfTLU5PSEpNLiq3SEnMzc3IWsbK7peZkpiSmAgCl0MUYNQAAAA&sa=X&ved=2ahUKEwjhi4DOtN_lAhVD7eAKHb7TBxAQmxMwBHoECAsQCQ Title: Persan Link: /search?ie=UTF-8&q=Persan+(chat)&stick=H4sIAAAAAAAAAONgFuLQz9U3MKwsqlACs7JMzMq01LKTrfSTMvNz8tMr9VPyc1OLSzKTE0tSU-IT8zJzE3OskopSU1OKF7HyBqQWFSfmKWgkZySWaAIAqDOJ_k4AAAA&sa=X&ved=2ahUKEwjhi4DOtN_lAhVD7eAKHb7TBxAQ0I4BMAp6BAgLEBE Title: Bleu russe Link: /search?ie=UTF-8&q=Bleu+russe&stick=H4sIAAAAAAAAAONgFuLQz9U3MKwsqlDiBLOMkpONtNSyk630kzLzc_LTK_VT8nNTi0sykxNLUlPiE_MycxNzrJKKUlNTihexcjnlpJYqFJUWF6cCAItrjb9MAAAA&sa=X&ved=2ahUKEwjhi4DOtN_lAhVD7eAKHb7TBxAQ0I4BMAp6BAgLEBM

merci bcp
Commenter la réponse de mattmax91
Messages postés
521
Date d'inscription
mardi 22 septembre 2009
Statut
Membre
Dernière intervention
10 novembre 2019
101
0
Merci
Bonjour mattmax91,

Je viens de refactoriser le code pour qu'il soit plus propre et qu'il match mieux à ton besoin.
Tu dois maintenant spécifier le nombre de page que tu veux explorer dans ta recherche Google.

<?php
require_once('simple_html_dom.php');



$search_query = "chat"; // Mots à rechercher (Un espace doit être égal au caractère "+")
$total_page_result = 10; // Nombre de pages à scrapper
$base_url = 'https://www.google.com/search?q=';

function printResult($linksArray){
echo "Total pages scrapped: " . $GLOBALS['total_page_result'] . "\n";
echo "Total number of links found: " . count($linksArray) . "\n\n";
echo "-----------------------------\n\n";
for ($i = 0; $i < count($linksArray); $i++) {
echo "Link: " . $linksArray[$i] . "\n";
}
}

function getGoogleResponse($base_url, $search_query, $total_page_result){
echo "Scrapping in progress...\n";
$linksArray = [];
for ($i = 0; $i < $total_page_result; $i++){
$html = file_get_html($base_url . $search_query . "$start=" . $i * 10);
$linkObjs = $html->find('a');

foreach ($linkObjs as $linkObj) {
$link = trim($linkObj->href);
if (!strstr($linkObj->href, "/search?") && strstr($linkObj->href, "/url?q")){
array_push($linksArray, trim($linkObj->href, "/url?q="));
}
}
}
printResult($linksArray);

}

getGoogleResponse($base_url, $search_query, $total_page_result);


?>


J'espère que ce code te conviendra.

Bien cordialement,
Commenter la réponse de mouloud11
0
Merci
Bonsoir mouloud11 merci beaucoup pour ton aide, j’aurai une dernière question, comment est ce que je pourrai trier les URL et n'afficher que les URL des sites d'information et non de vidéos, de vente...
Merci encore
mouloud11
Messages postés
521
Date d'inscription
mardi 22 septembre 2009
Statut
Membre
Dernière intervention
10 novembre 2019
101 -
Bonjour,

Alors il faudrait créer une liste de sites d'informations que tu souhaite garder ensuite faire une boucle sur la liste globale et garder seulement les sites de ta liste de sites d'informations.
mais si je les connais pas à l'avance, il n'y a pas un paramètre qui nous permettrai de les identifier?
mouloud11
Messages postés
521
Date d'inscription
mardi 22 septembre 2009
Statut
Membre
Dernière intervention
10 novembre 2019
101 -
Très honnêtement j’ai pas la réponse à cette question.
En revanche pour trier un peu plus les résultats tu peux faire ta recherche directement dans actualités, ça retourne surtout les sites d'informations.

Pour faire ça il faut que tu rajoute le tag "tbm=nws" à $search_query.
Exemple: $search_query = applestore&tbm=nws;
Commenter la réponse de mattmax91