Aller au contenu
Photo d’Armand Philippot
Logo d’Armand Philippot

Armand Philippot

Intégrateur web

Script pour extraire les URL des résultats de Google

Écrit par :
Armand
Publié le :
Temps de lecture :
9 minutes

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

Commentaires

    1. Armand avatar
      Armand

      Je n’étais pas au courant pour cette astuce ! Merci, je la note au cas où. 😉

    2. Christian avatar
      Christian

      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 !

      1. Armand avatar
        Armand

        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. 😉

        1. SeoBlack Inside avatar
          SeoBlack Inside

          Bonne 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.

          1. Armand avatar
            Armand

            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 !)

            1. Armand avatar
              Armand

              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.

            2. Maë avatar
              Maë

              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 :

              http://bit.ly/iBhMeh

              Merci pour ton code en tout cas, j’vais pouvoir commencer à débuter dans le scrap 🙂

              Laisser un commentaire