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

75 commentaires

Laisser un commentaire