Script pour extraire les URL des résultats de Google
Je ne dois pas être le seul à avoir déjà eu besoin de récupérer les URL proposées par Google dans ses pages de résultats, quel qu’en soit l’usage ultérieur. Pour utiliser un tel script, je ne pense pas qu’il soit question de couleur de chapeau comme pourrait le penser certain. Un script SEO a avant tout pour utilité de faciliter les tâches d’un référenceur et c’est ce que ce Google scraper fait.
Un peu d’histoire
Comme je le disais, je n’aime pas trop différencier les référenceurs par une couleur de chapeau. Le principal c’est que le travail soit fait et s’il faut utiliser des scripts pour que ça aille plus vite, alors pourquoi pas. Dans mon cas, l’idée de ce script m’est venu lorsque j’ai été confronté à une mise à jour d’un site : les URL avaient évidemment changé. Donc il fallait rapidement mettre en place des redirections mais n’ayant plus les anciennes URL en tête, ça n’aide pas. Plutôt que de récupérer les URL indexées par Google une par une, à la main, je me suis mis à la recherche d’un script pour me faciliter le travail.
Je suis alors tombé sur un script de SeoBlackOut datant de 2008. Malheureusement pour moi, vu la date ça ne m’étonnait qu’à moitié, il ne fonctionnait plus. J’ai donc effectué quelques corrections mais des problèmes persistaient. Je me suis donc décidé à créer mon propre script pour me faciliter la vie, et en faire profiter les autres. Une fois le script fini, il suffisait d’un copier-coller dans Excel pour avoir une vision nette sur toutes les URL à rediriger !
Les détails du script
Je vous propose deux versions d’un script pour SEO permettant d’extraire les URL des résultats de Google. La première version comporte du CSS et du Javascript pour un meilleur rendu mais aussi pour faciliter la vie à tout le monde. Cependant comme je sais que certaines personnes n’aiment pas le javascript, je vous livre une deuxième version nettoyée, vous gagnerez au passage quelques octets.
Pour utiliser l’un des deux scripts, rien de plus simple ! La première étape sera de faire un copier coller dans votre bloc-notes. Ensuite, il suffit d’enregistrer le fichier au format « .php ». Une fois cette rude tâche réalisée, vous n’aurez plus qu’à transférer le fichier sur votre serveur et à vous rendre, grâce à votre navigateur, sur la bonne URL. Évidemment, il est également possible de l’utiliser en local via un logiciel comme WAMP.
Le script possède 3 champs. Dans le premier, vous aurez à sélectionner le domaine concerné et la langue pour les cas particuliers. Dans le deuxième champ, vous indiquerez le nombre de page que vous souhaitez extraire. Enfin, le troisième champ est réservé à vos mots-clés. Voila, vous savez tout, je vous laisse tester par vous-même.
Google scraper
Script avec CSS et Javascript
<?php
// Script PHP par Armand Philippot - https://wp.armandphilippot.com/
if ((isset($_POST['ndd'])) && (isset($_POST['nbserp'])) && (isset($_POST['keywords']))) {
if (($_POST['ndd']) != "") {
$ndd = $_POST['ndd'];
switch ($ndd) {
case "fr":
$ext = "fr";
$hl = "fr";
break;
case "com":
$ext = "com";
$hl = "en";
break;
case "es":
$ext = "es";
$hl = "es";
break;
case "it":
$ext = "it";
$hl = "it";
break;
case "dede":
$ext = "de";
$hl = "de";
break;
case "uken":
$ext = "co.uk";
$hl = "en";
break;
case "au":
$ext = "com.au";
$hl = "en";
break;
case "cafr":
$ext = "ca";
$hl = "fr";
break;
case "caen":
$ext = "ca";
$hl = "en";
break;
case "befr":
$ext = "be";
$hl = "fr";
break;
case "benl":
$ext = "be";
$hl = "nl";
break;
case "bede":
$ext = "be";
$hl = "de";
break;
case "been":
$ext = "be";
$hl = "en";
break;
}
} else {
$ext = "fr";
$hl = "fr";
}
if (($_POST['nbserp']) != "" && (is_numeric($_POST['nbserp']))) {
$nbserp = strip_tags($_POST['nbserp']) - 1;
} else {
$nbserp = 3;
}
if (($_POST['keywords']) != "") {
$q = strip_tags($_POST['keywords']);
} else {
$error = '<p id="error">Veillez à remplir les champs correctement.</p>';
}
$page = 0;
$urlgoogle = "http://www.google." . $ext . "/search?hl=" . $hl . "&q=" . urlencode($q) . "&start=" . $page . "&filter=0";
$useragent = "Mozilla/5.0";
$urlserp = "";
while ($page <= $nbserp) {
if (function_exists('curl_init')) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
curl_setopt($ch, CURLOPT_URL, $urlgoogle);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$serps = curl_exec($ch);
curl_close($ch);
} else {
$serps = file_get_contents($urlgoogle);
}
preg_match_all('/<h3 class="r"><a href="(.*?)"/si', $serps, $matches);
$result = count($matches[1]);
$page++;
$urlgoogle = "http://www.google." . $ext . "/search?hl=" . $hl . "&q=" . urlencode($q) . "&start=" . $page . "0&filter=0";
$i = 0;
while ($i < $result) {
$urlserp .= trim($matches[1][$i]);
$urlserp = str_replace("/url?q=", "", $urlserp);
$urlserp = preg_replace("~(.+&sa)[^/]*~", "$1", $urlserp);
$urlserp = str_replace("&sa", "\n", $urlserp);
$urlserp = str_replace("/search?q=" . urlencode($q) . "&tbm=plcs", "", $urlserp);
$i++;
flush();
}
}
} else {
$error = '<p id="error">Veillez à remplir les champs correctement.</p>';
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="fr-FR" />
<meta http-equiv="X-UA-Compatible" content="IE=8" />
<meta name="language" content="fr-FR" />
<title>Google Scraper : Extraire les URL des résultats Google</title>
<meta name="description" content="Ce script permet d'extraire les URL des pages de résulats de Google. Script proposé par Armand Philippot, référenceur et rédacteur web." />
<style>
* {
margin: 0;
padding: 0;
}
body {
font-family: Verdana, Arial, Sans-Serif;
font-size: 12px;
}
#wrap {
margin: 20px;
}
h1 {
margin-bottom: 30px;
font-size: 20px;
}
h2 {
margin-bottom: 15px;
}
p {
margin-bottom: 15px;
}
form {
margin-bottom: 15px;
}
select,
#nbserp,
#search {
text-align: center;
}
select {
padding: 2px 1px;
}
#nbserp {
padding: 2px;
}
#keywords {
padding: 4px 8px;
margin-top: 15px;
}
#search {
margin-top: 15px;
width: 70px;
}
#copyright {
font-size: 10px;
}
#error {
font-weight: bold;
color: red;
}
textarea {
width: 800px;
height: 100%;
resize: none;
min-height: 500px;
}
#selectall {
width: 130px;
}
</style>
</head>
<body>
<div id="wrap">
<h1>Extraire les URL des résultats Google</h1>
<?php
if ((isset($_POST['ndd'])) && (isset($_POST['nbserp'])) && (isset($_POST['keywords']))) {
if (($_POST['ndd']) != '' && ($_POST['nbserp']) != '' && ($_POST['keywords']) != '') {
echo "<h2>Résultats de votre recherche pour : " . $q . " sur Google." . $ext . "</h2>";
echo '<form id="listURL">';
echo '<p><input type="button" id="selectall" value="Sélectionner tout" onClick="javascript:this.form.selectionURL.focus();this.form.selectionURL.select();" /></p>';
echo '<textarea id="selectionURL">' . urldecode($urlserp) . '</textarea>';
echo '</form>';
} else {
echo $error;
}
}
?>
<form id="form-extract" method="POST" action="<?php echo strip_tags($_SERVER['REQUEST_URI']); ?>">
<p>
<label for="ndd">Choisir la version de Google :</label>
<select name="ndd">
<option value="fr">Google.fr</option>
<option value="com">Google.com</option>
<option value="es">Google.es</option>
<option value="it">Google.it</option>
<option value="dede">Google.de</option>
<option value="uken">Google.co.uk</option>
<option value="au">Google.com.au</option>
<option value="cafr">Google.ca FR</option>
<option value="caen">Google.ca EN</option>
<option value="befr">Google.be FR</option>
<option value="benl">Google.be NL</option>
<option value="bede">Google.be DE</option>
<option value="been">Google.be EN</option>
</select>
</p>
<p>
<label for="nbserp">Nombre de pages à extraire :</label>
<input type="text" size="4" name="nbserp" id="nbserp" value="3" />
</p>
<p><input type="text" size="70" name="keywords" id="keywords" value="" /></p>
<p><input type="submit" name="search" id="search" value="Extraire" /></p>
</form>
<p id="copyright">Ce script vous est proposé par Armand Philippot, <a href="https://wp.armandphilippot.com/">référenceur web</a>.</p>
</div>
</body>
</html>
Script sans CSS ni Javascript
<?php
// Script PHP par Armand Philippot - https://wp.armandphilippot.com/
if ((isset($_POST['ndd'])) && (isset($_POST['nbserp'])) && (isset($_POST['keywords']))) {
if (($_POST['ndd']) != "" && ($_POST['nbserp']) != "" && ($_POST['keywords']) != "") {
if (isset($_POST['ndd'])) {
$ndd = $_POST['ndd'];
switch ($ndd) {
case "fr":
$ext = "fr";
$hl = "fr";
break;
case "com":
$ext = "com";
$hl = "en";
break;
case "es":
$ext = "es";
$hl = "es";
break;
case "it":
$ext = "it";
$hl = "it";
break;
case "dede":
$ext = "de";
$hl = "de";
break;
case "uken":
$ext = "co.uk";
$hl = "en";
break;
case "au":
$ext = "com.au";
$hl = "en";
break;
case "cafr":
$ext = "ca";
$hl = "fr";
break;
case "caen":
$ext = "ca";
$hl = "en";
break;
case "befr":
$ext = "be";
$hl = "fr";
break;
case "benl":
$ext = "be";
$hl = "nl";
break;
case "bede":
$ext = "be";
$hl = "de";
break;
case "been":
$ext = "be";
$hl = "en";
break;
}
} else {
$ext = "fr";
$hl = "fr";
}
if ((isset($_POST['nbserp'])) && (is_numeric($_POST['nbserp']))) {
$nbserp = strip_tags($_POST['nbserp']) - 1;
} else {
$nbserp = 3;
}
if (isset($_POST['keywords'])) {
$q = strip_tags($_POST['keywords']);
} else {
$error = '<p id="error">Veillez à remplir les champs correctement.</p>';
}
$page = 0;
$urlgoogle = "http://www.google." . $ext . "/search?hl=" . $hl . "&q=" . urlencode($q) . "&start=" . $page . "&filter=0";
$useragent = "Mozilla/5.0";
$urlserp = "";
while ($page <= $nbserp) {
if (function_exists('curl_init')) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
curl_setopt($ch, CURLOPT_URL, $urlgoogle);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$serps = curl_exec($ch);
curl_close($ch);
} else {
$serps = file_get_contents($urlgoogle);
}
preg_match_all('/<h3 class="r"><a href="(.*?)"/si', $serps, $matches);
$result = count($matches[1]);
$page++;
$urlgoogle = "http://www.google." . $ext . "/search?hl=" . $hl . "&q=" . urlencode($q) . "&start=" . $page . "0&filter=0";
$i = 0;
while ($i < $result) {
$urlserp .= trim($matches[1][$i]);
$urlserp = str_replace("/url?q=", "", $urlserp);
$urlserp = preg_replace("~(.+&sa)[^/]*~", "$1", $urlserp);
$urlserp = str_replace("&sa", "<br />", $urlserp);
$urlserp = str_replace("/search?q=" . urlencode($q) . "&tbm=plcs", "", $urlserp);
$i++;
flush();
}
}
} else {
$error = '<p id="error">Veillez à remplir les champs correctement.</p>';
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="fr-FR" />
<meta http-equiv="X-UA-Compatible" content="IE=8" />
<meta name="language" content="fr-FR" />
<title>Google Scraper : Extraire les URL des résultats Google</title>
<meta name="description" content="Ce script permet d'extraire les URL des pages de résulats de Google. Script proposé par Armand Philippot, référenceur et rédacteur web." />
</head>
<body>
<div id="wrap">
<h1>Extraire les URL des résultats Google</h1>
<?php
if ((isset($_POST['ndd'])) && (isset($_POST['nbserp'])) && (isset($_POST['keywords']))) {
if (($_POST['ndd']) != '' && ($_POST['nbserp']) != '' && ($_POST['keywords']) != '') {
echo "<h2>Résultats de votre recherche pour : " . $q . " sur Google." . $ext . "</h2>";
echo '<div>' . urldecode($urlserp) . '</div>';
} else {
echo $error;
}
}
?>
<form id="form-extract" method="POST" action="<?php echo strip_tags($_SERVER['REQUEST_URI']); ?>">
<p>
<label for="ndd">Choisir la version de Google :</label>
<select name="ndd">
<option value="fr">Google.fr</option>
<option value="com">Google.com</option>
<option value="es">Google.es</option>
<option value="it">Google.it</option>
<option value="dede">Google.de</option>
<option value="uken">Google.co.uk</option>
<option value="au">Google.com.au</option>
<option value="cafr">Google.ca FR</option>
<option value="caen">Google.ca EN</option>
<option value="befr">Google.be FR</option>
<option value="benl">Google.be NL</option>
<option value="bede">Google.be DE</option>
<option value="been">Google.be EN</option>
</select>
</p>
<p>
<label for="nbserp">Nombre de pages à extraire :</label>
<input type="text" size="4" name="nbserp" id="nbserp" value="3" />
</p>
<p><input type="text" size="70" name="keywords" id="keywords" value="" /></p>
<p><input type="submit" name="search" id="search" value="Extraire" /></p>
</form>
<p id="copyright">Ce script vous est proposé par Armand Philippot, <a href="https://wp.armandphilippot.com/">rédacteur web seo</a>.</p>
</div>
</body>
</html>
Le script a été testé à plusieurs reprises avec différentes requêtes, mais il est possible qu’un bug soit passé inaperçu. Donc si vous rencontrez des difficultés à utiliser le script, n’hésitez pas à me contacter pour que je fasse les corrections nécessaires.
MAJ du 20/06/2019 : le script n’est plus fonctionnel en l’état
75 commentaires
Je n’étais pas au courant pour cette astuce ! Merci, je la note au cas où. 😉
Merci pour le partage, ce sera toujours mieux que SB qui a vraiment du mal avec les résultats sur la France.
On va essayer cela !Normalement ça fonctionne correctement. J’ai pas regardé en détails chaque pays proposés, mais ceux qui seront le plus utilisés normalement tout est ok.
PS : Désolé pas de KeywordLuv ici, mais le lien est bien en dofollow. 😉
Merci pour le partage : code et dofollow.
ça va scrapper durBonne référence le site “SeoBlackOut ” 😉
Et merci pour cette adaptation.J’attire cependant l’attention, tout comme avec ScrapeBox c’est à utiliser avec “délicatesse” sous peine de se prendre un joli “503”.
Bien sur si vous avez des proxies valident GG, pas de soucis.
Effectivement, je n’ai pas précisé mais sans proxy faut sûrement pas en faire un usage intensif. Par contre, si c’est quelques requêtes de temps en temps, même sans proxy ça passe. (enfin en tout cas pour le moment pas eu de soucis !)
Pour une utilisation peu intensive est-qu’un VPN suffit ?
Oui je pense que c’est suffisant.
Il ne faut pas non plus avoir peu de l’utiliser sans rien. J’ai effectué tout mes tests sans proxy et aucun soucis jusqu’à maintenant. 😉
Le conseil de SeoBlack Inside c’est surtout pour ceux qui comptent envoyer un trop grand nombre de requêtes.
Salut Armand (ou Arnaud c’est pareil hein :p)
Je te donne le lien pour scrap avec GG Docs si ça t’intéresse et si l’anglais te fait pas peur :
Merci pour ton code en tout cas, j’vais pouvoir commencer à débuter dans le scrap 🙂
Merci je regardais ça ! (et merci de me faire remarquer un bug dans les commentaires -__- je regarderais pourquoi il me vire les http:// des liens dans le texte)
Merci pour le partage. Je pense que ca va aider pas mal de personne. c’est toujours intéressant de scraper des résultats de Google pour en faire différentes choses.
Cool par flemme je ne maintenais plus mon code depuis des mois, et au bout d’un moment ca fini par ne pluspasser. Je vais adapter celui-ci, merci beaucoup !
Je valide à priori tous les commentaires tant qu’il ne s’agit pas d’un “Bon article” et les liens sont en dofollow.
Par contre, je discute avec des personnes donc seuls les prénoms ou pseudo sont autorisés.
Dans le cas contraire, je remplace par le pseudo/prénom de la personne s’il est évident, sinon je supprime le lien.Après ce petit éclaircissement, je vous remercie tout de même tous pour l’intérêt porté au script. 😉
Bien vu ! Et merci car un script perso que l’on peut toujours retoucher est sacrément pratique.
Bravo pour le partage !Sylvain
Et pour les personnes qui ne sont pas développeurs, elles font comment pour exécuter le script ? : )
Il faut tout d’abord le sélectionner, le copier puis le coller dans un éditeur de texte type bloc-notes pour l’enregistrer au format “.php”.
Ensuite, il faut soit le transférer sur un serveur via FTP (par exemple la racine de votre site), soit utiliser un logiciel comme WAMP (pour Windows, sinon MAMP sur Mac ou LAMP sur Linux).
Sur votre serveur il suffit ensuite de se rendre sur la bonne URL.
Avec WAMP, une fois installé, il vous permettra de simuler un serveur en local : vous vous rendez dans le dossier www, vous créez un dossier “google-scraper” par exemple et vous y coller le fichier. Ensuite dans votre navigateur vous vous rendez surhttp:// localhost/google-scraper/votre-fichier .php
(sans les espaces)
En espérant que les explications sont assez claires. 😉
Avec une petite armée de proxies ce script sera parfait. Un partage fort utile !
Merci pour le partage de ce script, c’est vrai que c’est assez laborieux pour les résultats français avec un logiciel dédié comme SB etc… Je le met du coup en place de suite sur mon serveur 😉
Très utile ton script, sympa de le partager, par contre a coupler avec des proxy’s pour plus d’efficacité …
Merci pour le script. Le problème reste du côté des proxies, mais pour ceux qui en utilisent pas souvent, hésitez pas à aller faire un tour sur les forum US black hat. des mecs laissent chaque jour des centaines de proxies à utiliser. c’est pas de la grande qualité, mais c’est gratuit!
Merci pour cet outil et de le faire partager ça peu être très utile. Il y à moyen de le rendre encore plus puissant en y ajoutant une fonction de proxy ou quelques autres outils intéressant. encore merci 🙂
C’est un vrai bonheur que de pouvoir compter sur les autres quand on y connait rien en code 🙂
Comme on dit au States là d’où je viens (euh non en fait ^^) “You’ve made my day!”Merci pour le commentaire, ça fait toujours plaisir d’avoir un retour !
Par contre, comme précisé quelques commentaires au dessus : je parle avec des personnes et non avec des mots-clés, donc à défaut d’un prénom/pseudo j’ai remplacé le mot-clé par webmaster.
Enfin un script en php facile à mettre en place et surtout fonctionnel! Merci!
J’ai un petit soucis cependant, j’aimerais modifier le script pour pouvoir entrer plusieurs mots clés et avoir le nombre de resultats pour chacuns. Auriez-vous une piste pour y arriver?
Cordialement
Esteban
Pour compter le nombre de résultat je modifierais le script à partir de :
$result=count($matches[1]);
Il faudrait une variable qui va additionner le nombre de matches et afficher cette variable.
Par contre :
while ($page<=$nbserp)
La variable $nbserp permet de ne pas avoir de boucle infinie en limitant while. Donc pour ceux que tu veux je dirai qu'il faudrait modifier en :
while ($page == true)
(tant qu'il y a des pages continuer la boucle)
Pour qu'il y ait plusieurs mots-clés je dupliquerais le champ de requête, et je dupliquerais la boucle pour qu'il y en a une par mot-clé. Le code risque d'être assez long par contre... il y a sûrement moyen de le réduire mais là à première vue c'est la méthode la plus simple je dirai.
Salut,
Je viens de tester ça, pas de bugs de mon côté donc bien content :-). Je te tire mon chapeau! (et peu importe sa couleur 😉Pratique !
Je viens de détourner ce script pour en faire un testeur de pénalité google sur mes listes d’annuaires et de CPs 🙂un cron, et il me checke toutes les nuits le bon état de santé de mes petites targets.
Merci !
Je n’avais pas pensé à ce détournement mais effectivement c’est pas bête comme idée. Le but c’est bien de proposer une base pour que chacun en fasse ce qu’il lui plaise. D’ailleurs, je me suis rendu compte que j’ai même omis de mettre “filter=O” dans l’URL… donc c’est encore plus “une base”.
Cool ! J’étais justement en train de réécrire le script de SeoBlackOut, quand j’ai eu l’idée de chercher sur Google si jamais quelqu’un l’avait pas déjà fait !
Merci, j’ai gagné une journée grâce à toi ! 😉
Trop bien pour faire des petites recherches de WPMU 🙂
Merci beaucoup !
Par contre ton outil fonctionne avec la commande “site:site.com” mais pas pour “allinurl:site.com”. Aurais tu une astuce pour le faire fonctionner ?
Merci d’avance
Note : Je veux bien être sympa et aider, mais inventer un problème juste pour reposer un backlink parce que le 1er n’est pas passé… ça ne me plait pas trop comme pratique. A bon entendeur. 😉
Je viens de tester, et ça fonctionne en local de mon côté pour les 2 versions du script.
Tu obtiens un message d’erreur ? Ou rien ne s’affiche ?Chez moi l’écran est blanc avec le script avec CSS et Javascript et l’autre ne fait rien :/
Tu es sûre d’avoir copié l’intégralité du code ? Je viens de tester les deux versions en local (sous WAMP, sans proxy) et les deux scripts fonctionnent sans problèmes chez moi…
Extra pile poile ce dont j’avais besoin!
En revanche j’ai un petit soucis au niveau de l’url decode (%3F et %3D) est-ce seulement chez moi?
Merci encore pour ce ptit script
(et +1 lecteur RSS pour ta peine)Effectivement il manquait un urldecode, merci pour la remarque. 😉 J’ai mis à jour le script dans l’article.
Au niveau de l’affichage des résultats dans le body (dans le textarea pour le 1er et dans la div pour le 2e) il faut modifier le $urlserp en urldecode($urlserp)merci pour le tuto vraiment intéressant
Bonjour, ma question peut paraître stupide mais elle est la suivante, la majoritée des blogs actuels tourne via un CMS, de tel script existe déjà. Sais tu m’indiquer pourquoi as tu pris le temps ( je pense qu’il en faut tout de même 😉 ) et l’interêt de remettre au gout du jour un tel script ? 😉
Je ne comprends pas bien le rapport avec les CMS, donc je ne répondrai peut être pas efficacement à ta question.
Pour ce qui est du script, il me permet de gagner du temps pour récupérer l’ensemble des URL indexées d’un site. Certains sites que je gère subissent des mises à jour par d’autres personnes et je ne suis pas toujours informés à temps pour mettre en place les redirections nécessaires. Donc je crée les redirections en me basant sur les URL indexées par Google. 😉 Après ce n’est pas le seul usage… mais c’est celui qui m’a poussé à faire ce script : éviter de perdre du temps pour pas grand chose.
Bonjour, c’est super intéressant comme script.
Je recherche un système un peu différent mais je débute alors si vous quelques conseils de scripts ou d’astuces ce serait super.
Mon objectif :
récupérer les actualités de 100 sites internet sur différents mots clés dans la presse.
Ce à quoi j’ai pensé :
1) faire une requête quotidienne dans google par mot clé (en sélectionnant les dernières 24h)
2) filtrer les url en fonction des domaines correspondants aux 100 sites définis
3) récupérer les balises title et metadescription de chaque url
Comment faire ? y a t-il un script ou une associations de script que vous pourriez me conseiller ?
Merci d’avance
Bonjour,
A ma connaissance il n’y a pas de script tout prêt…
Pour le point 1), en faisant quelques modifications du script proposé dans l’article c’est faisable. Ce qu’il faut c’est rajouter le paramètre &tbs=qdr:d dans l’URL pour filtrer les résultats datant de moins de 24h. Après, plutôt que de rentrer un nombre de page (ou alors vérifier avant combien il y a de pages à la main dans Google) il faudrait faire une boucle qui fonctionne tant que la condition (qu’il y ait des résultats) est vraie.
Pour le point 2), à part faire le ménage soit même dans Excel, je ne vois pas… mais avec 100 sites c’est sûr que ça peut être long. Sinon avec un script qui va scrapper le contenu du document pour récupérer les URL commençant pas les noms de domaines sélectionnés, ça doit être faisable mais là encore aucun script tout prêt à ma connaissance…
Pour le point 3), il y a bien ce script qui permet en rentrant une liste d’URL de récupérer les métas : http://www.outils-referencement.com/outils/pages-web/analyse Par contre, c’est pas idéal pour les récupérer. Peut-être regarder du côté du plugin SEO pour Excel, je ne le connais pas assez, il faudrait que je me penche un peu plus dessus un de ces jours, mais il y a peut être une fonction pour récupérer les métas d’une URL donnée.
Salut Armand, aurais-tu un exemple de requête qui fonctionne ? Je ne sais pas si c’est moi qui galère, mais j’ai testé avec des mots-clés et des URLs, mais ça ne me renvoi aucun résultat.
Salut Maëva,
C’est bizarre, je viens de retester les deux scripts et chez moi il n’y a pas de problème. J’ai essayé avec “hôtel design” par exemple et ça me remonte bien les URLs…
Quel est le problème ? rien ne s’affiche ? ou c’est autre chose ?
Si tu veux pas mettre ça publiquement tu peux toujours m’expliquer le problème par mail. 😉
Bonjour,
ce script est-il encore fonctionnel?
Lorsque je le teste sur Eclipse il me renvois l’erreur suivante:
PHP Notice: Undefined index: REQUEST_URI in C:\..\workspace\php\script.php on line 141
PHP Stack trace:PHP 1. {main}() C:\..\workspace\php\script.php:0
MerciBonjour,
Oui le script fonctionne toujours. Je viens de retester pour ne pas dire de bêtise.
Par contre, n’ayant jamais essayé de le faire fonctionner via Eclipse je ne saurai dire d’où vient le problème. Est-ce que vous avez essayé avec un logiciel comme WAMP ou EasyPHP ? Ou tout simplement en le transférant sur un serveur via FTP ?
A priori l’erreur rencontrée correspondrait à l’adresse renseignée dans le formulaire :
echo strip_tags($_SERVER[‘REQUEST_URI’]);
Certainement qu’Eclipse n’arrive pas à ressortir l’URI…
Bonjour,
je vous remercie de me répondre aussi vite.
Effectivement il fonctionne bien sur Wamp. Cependant, je me demandais s’il était possible d’obtenir l’ensemble des résultats de Google (sans préciser un nombre de pages à extraire au préalable). Par ailleurs, en ce qui concerne les requêtes, est-il possible qu’elles contiennent un filetype.
Merci encoreBonjour,
Content de voir que le problème est finalement résolu !
Pour les commandes Google, oui elles fonctionnent à travers le script donc filetype également.
Pour le nombre de pages, ce doit être réalisable en modifiant le script. Il faudrait préciser que la boucle PHP continue de récupérer les résultats tant qu’il y a encore des pages mais c’est plus compliqué à gérer. Et même si je comprend l’idée, je n’ai jamais été en mesure de trouver comment le faire fonctionner. Donc je ne pourrai pas aider à ce niveau là…
Bonjour,
je vous remercie de répondre.
Concernant le filetype, ça fonctionne à la perfection.
Et pour ce qui est du nombre de pages, il serait possible à mon avis d’essayer de l’obtenir en récupérant le nombre de résultats dans comme pour les URL et de le diviser par 10. Comme suit:
$request = ‘ le mot clé’;
$url = “http://www.google.fr/search?aq=f&sourceid=chrome&ie=UTF-8&q=$request”;$page = file_get_contents ($url);
preg_match_all(‘#Environ(.+)résultats#’,$page, $numResult);
$numPages=$numResult/10;
print_r($numPages);Cependant, je ne suis pas sûre de pouvoir me fier aux chiffres que Google avance.
Bonjour,
J’ai également pensé à cette donnée mais le nombre de résultats affiché par Google est approximatif, ça ne correspond pas forcément à la réalité. Donc ça pourrait être mis en place mais au final ça ne sera pas vraiment plus efficace que de renseigner soi-même un nombre de page… Si Google pouvait nous simplifier la vie ce serait trop beau. 🙂
Merci pour ce partage. Je suis tombé sur ton site en cherchant un scrapeur JS car le miens ne fonctionne plus depuis la dernière mise à jour de Firefox mais ton script va me faire gagner beaucoup de temps, je l’ajoute à ma SEO box perso.
J’ai modifié un peu le script pour générer des user agent aléatoires et utiliser mes proxy privés et ça tourne du tonerre sur des milliers de requête.
Il faudrait toutefois ajouter une temporisation aléatoire pour ne pas griller les IP.Merci à toi !
De rien, et tu as bien saisi l’utilité ! Le but c’est que chacun puisse l’adapter à son utilisation. Là j’établis un seul user-agent sans proxy, pour une utilisation “de base”, ponctuelle, c’est suffisant je pense. De même il est possible de jouer avec les paramètres Google. Depuis la mise en ligne, j’ai rajouté le paramètre &filter=0, ce qui peut donner des résultats un peu différent par rapport à une recherche dans son navigateur puisque le scraper inclura l’index secondaire. 😉
Merci pour ce super script (mais je me suis fait 503iser par google 😉
Pour avoir le bon nombre de résultat il suffirait de faire une première recherche avec le nombre approximatif (qui d’expérience est toujours largement plus large que la réalité, surtout avec un site:) puis de faire une deuxième recherche avec un start avec ce nombre divisé par 2, on obtient une vraie réévaluation du nombre de résultats. (En tout cas mes différents tests sur quelques sites que je gère, fonctionnent avec cette méthode)
pour éviter les 503, une méthode possible serait d’avoir le numéro de page de début en plus, comme ca on peut lancer la recherche en plusieurs étapes, en laissant suffisamment de temps entre chaque demande pour être un gentil utilisateur du web.
Merci pour tes idées ! C’est certain qu’il y a différents moyens de l’améliorer, là c’est vraiment une version de base. Au moins ça permet à chacun de le personnaliser comme il le souhaite. Et ça revient moins cher qu’un scrapebox pour du scrap occasionnel. 🙂
En tout cas ça donne quelques pistes pour ceux qui ne sont pas allergiques au code ! Si un jour je trouve le temps j’essaierai de proposer une version plus aboutie, mais j’ai déjà du mal à trouver le temps de poster de nouveaux articles donc ça ne sera pas pour tout de suite…
Je suis tombé par hasard sur ton site en recherchant également le moyen de scraper sans outil.
Je vais de ce pas essayer ton script voir s’il marche toujours, et surtout, si on ne se fait pas bloquer trop vite.
(Suis également tombé sur l’article d’antoine brisset avec les plugins Chrome).Tu l’utilises toujours? et tu prévois de faire un script permettant l’utilisation de proxys?
Oui je l’utilise toujours, aucun soucis de mon côté. Et si quelqu’un rencontre un dysfonctionnement, je suis toujours prêt à trouver une solution. Pour ce qui est l’utilisation de proxys, disons que c’était prévu et que je m’y mettrai sûrement un jour mais pour le moment je suis pris par d’autres projets donc j’ai un peu mis ça de côté. 😉
Salut Armand, merci pour ces scripts c’est exactement ce que je cherchais. Par contre, ils ne fonctionnent pas chez moi. Lorsque je valide çà me fait un refresh de la page …
Salut Maxime, je viens de retester les deux scripts et aucun problème chez moi… Une collègue de promo rencontrait un problème similaire (au boulot ça faisait la même chose que toi, chez elle ça fonctionnait…) mais au final on n’a pas identifié le problème.
Tu utilises le script en local (wamp, easyphp… ?) ou tu l’as uploadé sur un serveur ? Si ce n’est pas déjà fait, tu devrais peut être essayer une autre solution : si tu utilises easyphp, teste wamp… si ça fonctionne c’est que ça doit venir d’un module à activer je pense…
Merci pour cet aide, je vais tester ces scripts et vous donner mes remarques.
Bonjour,
Merci pour ces scripts c’est exactement ce que je cherchais et ça marche bien.Excellent et très utile ce script. Merci pour le partage.
Bonjour,
le script ne donne pas de résultats, la textbox reste vide. Est-ce qu’il y a une nouvelle version ?
MerciBonjour,
Je viens de retester le script présent sur le site et de mon côté il fonctionne toujours.
L’avez-vous testé en local ? Ou l’avez-vous mis en ligne ?
Je sais qu’une autre personne a déjà rencontré ce problème mais je n’arrive pas à l’expliquer. Je me demande si ce n’est pas du au fait que le serveur utilisé ne supporte pas “curl”… Si vous l’avez essayé en local, je vous conseille de l’essayer en ligne ou en utilisant un autre logiciel. (de mon côté, il n’y a aucun problème avec WAMP)
est-ce-que c’est possible d’y inclure d’autre site comme exemple youtube ?
Bonjour, le script ne fonctionne plus :/ Y a t-il un MAJ à faire ?
=> la textbox reste vide.
Je l’ai installé sur mon serveur et rien n’y fait :/
Pouvez-vous m’aider svp ?
merci d’avance
De mon côté le script fonctionne toujours. Il semblerait que chez certaines personnes le script ne fonctionne pas mais je n’ai toujours pas réussi à identifier d’où venait le problème. Peut-être une histoire de composant PHP qui n’est pas activé… Ce que je peux vous conseiller c’est de l’essayer sur un autre serveur (même en local) pour voir si vous rencontrez le même problème.
comment ajouté un id a chaque ligne de résultat (chaque lien) ??
merciMerveilleux, c’est le genre de découverte que l’on trouve et qui vous facilite grandement la vie enfin si je ne rencontre pas d’embuche de mon côté après l’avoir essayé.
Sinon il y a la technique avec MOZbar et le scrap de 100 résultats sur la page des SERPS avec ce code à ajouter en fin d’URL une fois la requête lancée &num=100&filter=0 puis on relance la requête et hop une page bien remplie, un coup d’export avec la toolbar de moz ou SEO Quake et le tour et joué. L’inconvénient c’est qu’il faut réitérer la manipulation.1000 merci
Bonjour
Comme beaucoup, je suis “tombé” sur votre page. Très intéressant.
J’ai besoin d’importer tous les résultats d’une recherche Google dans une feuille Google Sheet. Avec IMPORTXML, cela fonctionne.
Pour que les résultats soient neutres et en français, j’ai bien placé “&pws=0&gl=fr”.
Existe-t-il une syntaxe à placer dans l’URL de recherche permettant d’afficher également les pages des résultats omis?
Je vous remercieBonjour,
Normalement le paramètre est déjà en place dans le script, il s’agit de “&filter=0” et, sauf erreur de ma part, c’est toujours valable !
Bonjour,
Ce programme est-il toujours d’actualité ?
Le résultat de la recherche est vide une fois la recherche faite.Merci de votre réponse,
Bonjour,
Effectivement, le script ne fonctionne plus. Pour le moment, je ne peux pas chercher d’où ça vient… J’essaierai de trouver l’origine du problème quand j’en aurai l’occasion.
Bonjour,
Le problème ne vient pas du changement de Xampp, Wamp, Mamp … J’ai testé les trois et rien n’y fait.
Je vais essayer de regarder directement dans le code voir d’où vient le problème, je vous tiens au courant.Merci.
Bonjour Armand,
Je commence actuellement un projet ou j’ai besoin d’un script comme le tiens, je suis débutant mais mon tuteur de stage me demande de lui faire un logiciel pouvant scraper via des url google… un peu compliqué à programmer pour un débutant lol
Ton script m’intéresse énormément mais il m’annonce que la variable $q n’est pas défini … est-ce que tu saurais comment je peux régler ça ?
Merci pour ton aide
à bientôt !Bonjour,
Concernant
$q
, je n’arrive pas à reproduire le problème. La variable représente les mots-clés saisis par l’utilisateur. De mon côté, si les mots-clés sont bien saisis, il n’y a aucune erreur ; sinon le message “Veillez à remplir les champs correctement.” s’affiche. Donc, de ce côté-là, ça fonctionne correctement.Par contre, le script ne fonctionne plus depuis 2019 (comme écrit en fin d’article) et je n’ai pas pris le temps de chercher comment régler le problème. Je pense que ça doit venir de
preg_match_all
(le pattern a du changer) si ça peut t’aiguiller pour ton script.
razbithume
Merci pour le script 🙂
Google docs peut également servir de scraper, en utilisant les fonctions importxml.