Scraping google url

Fermé
mattmax91 - 9 nov. 2019 à 19:26
mouloud11 Messages postés 518 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.
A voir également:

4 réponses

mouloud11 Messages postés 518 Date d'inscription mardi 22 septembre 2009 Statut Membre Dernière intervention 10 novembre 2019 125
10 nov. 2019 à 01:43
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.
1
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
0
mouloud11 Messages postés 518 Date d'inscription mardi 22 septembre 2009 Statut Membre Dernière intervention 10 novembre 2019 125
10 nov. 2019 à 20:39
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,
0
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
0
mouloud11 Messages postés 518 Date d'inscription mardi 22 septembre 2009 Statut Membre Dernière intervention 10 novembre 2019 125
10 nov. 2019 à 23:25
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.
0
mais si je les connais pas à l'avance, il n'y a pas un paramètre qui nous permettrai de les identifier?
0
mouloud11 Messages postés 518 Date d'inscription mardi 22 septembre 2009 Statut Membre Dernière intervention 10 novembre 2019 125
10 nov. 2019 à 23:37
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;
0