Formation référencement

Extraire les urls des résultats de Google

Ecrit par admin le Dimanche 26 octobre 2008 à 15:12 - Catégorie Scraping,Scripts PHP

Comment extraire / parser les urls de résultats de recherche de Google ?

Cela fait plusieurs fois qu’on me demande comment extraire les urls de résultats de recherche de Google dans le but de les utiliser pour diverses raisons : recherche de pages de soumission d’annuaires, recherche des pages de blog avec commentaires, pages de forums, commande link ou site…

Voici donc un script php qui permet d’extraires ces urls de Google.

Différentes options sont proposées, comme le nombre de pages à extraire ou le moteur Google où se fera l’extraction ainsi que la langue du moteur.

Code source du script :

Voici le code du script php à copier/coller dans un fichier et à uploader sur votre serveur ou à utiliser en local :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
<?php
//Script php : Extraction urls Résultats Google
// Copyrights 2008 Seoblackout.com
//http://www.seoblackout.com	
//Url script : http://www.seoblackout.com/2008/10/26/extraire-resultats-google/
 
@set_time_limit(0);
$useragent='Mozilla/5.0';
$regex='<h3 class="r">';
//extension et langue google
if ((isset($_POST['ext'])) && ($_POST['ext']!='')) 
{
	$ext=strip_tags($_POST['ext']);
	if ($ext=='fr') {
	$lang='fr';
	}
	else if ($ext=='com') {
	$lang='en';
	} 
	else if ($ext=='es') {
	$lang='es';
	}
	else if ($ext=='de') {
	$lang='de';
	}
	else if ($ext=='ca') {
	$lang='en';
	}
	else if ($ext=='ca2') {
	$ext='ca';
	$lang='fr';
	}
	else {
	$ext='fr';
	$lang='fr';
	}
}
else 
{
	// par défaut, on recherche sur google.fr et lang=fr
	$ext='fr';
	$lang='fr';
}
//nombre de page à extraire :
if ((is_numeric($_POST['pages'])) && ($_POST['pages']!='')) 
{
	$c=(strip_tags($_POST['pages'])-1);
}
else 
{
	//10 pages par défaut, on part de 0 donc 10 pages = 9
	$c=9;
}
 
if ((isset($_POST['kw'])) && ($_POST['kw']!='')) 
{
	$kw=trim(strip_tags($_POST['kw']));
	$pagenum = 0;			
	$googlefrurl = "http://www.google.".$ext."/search?hl=".$lang."&q=" . urlencode($kw) . "&start=$pagenum";
	$url_new = '';
 
	while($pagenum <= $c) 
	{
			if (function_exists('curl_init')) 
			{
				$ch = curl_init();
				curl_setopt($ch, CURLOPT_USERAGENT, $GLOBALS['useragent']);
				curl_setopt($ch, CURLOPT_URL,$googlefrurl);
				curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
				$result=curl_exec ($ch);
				curl_close ($ch);
			} 
			else 
			{
				$result= file_get_contents($googlefrurl);
			} 	
		preg_match_all('/'.$regex.'<a href="(.*?)"/si', $result, $matches);
			$i = 0;
			$n = count($matches[1]);
			$pagenum++;
			$pagenum2 = $pagenum.'0';
			$googlefrurl = "http://www.google.".$ext."/search?hl=".$lang."&q=" . urlencode($kw) . "&start=$pagenum2&safe=off&pwst=1&filter=0";
 
			while($i <= $n) 
			{
				$url_new1 = addslashes($matches[1][$i]);
				$url_new .= trim($matches[1][$i])."<br>";
				$i++;
				flush();
			}
	}
	$url_new .= '';				
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Extraction Urls résultats Google</title>
</head>
<body>
<h1>Extraction Urls résultats Google</h1>
<div>
<?php 
if ((isset($_POST['kw'])) && ($_POST['kw']!='')) {
	echo "<h3>Keyword : ",strip_tags($kw),"</h3>";
	echo "<h6>Google Results</h6>";
	echo str_replace('<br><br>','<br>',$url_new); 
}
?>
<form method="POST" action="<?php echo strip_tags($_SERVER['REQUEST_URI']) ;?>">
<p>Saisir vos mots-clés :</p>
<input name="kw" type="text" size="100" value="<?php if (isset($_POST['kw'])) {echo strip_tags($kw);} ?>">
<p>Nombre de pages à extraire (optionel => 10 pages par défaut):</p>
<input name="pages" type="text" size="3" maxlength="3" value="<?php if (isset($_POST['pages'])) {echo strip_tags($_POST['pages']);} else {echo '10';} ?>">
<p>Moteur :</p>
<select name="ext">
<option value="fr"<?php if (($_POST['ext'])=='fr') {echo ' selected';} ?>>Google.fr (hl=fr)</option>
<option value="com"<?php if (($_POST['ext'])=='com') {echo ' selected';} ?>>Google.com (hl=en)</option>
<option value="es"<?php if (($_POST['ext'])=='es') {echo ' selected';} ?>>Google.es (hl=es)</option>
<option value="de"<?php if (($_POST['ext'])=='de') {echo ' selected';} ?>>Google.de (hl=de)</option>
<option value="ca"<?php if (($_POST['ext'])=='ca') {echo ' selected';} ?>>Google.ca (hl=en)</option>
<option value="ca2"<?php if (($_POST['ext'])=='ca2') {echo ' selected';} ?>>Google.ca (hl=fr)</option>
</select>
<p><input type="submit" value="Go" name="go">
<input type='button' value='Annuler' onclick='location.href="<?php echo strip_tags($_SERVER['REQUEST_URI']) ;?>"'></p>
</form>
<br />
<small>Script proposé par SEO BlackOut : <a href="http://www.seoblackout.com/">référencement</a></small>
</div>
</body>
</html>

Démo :

Dans la démo, le nombre de résultats extraits est limité à 3 pages uniquement !

http://www.seoblackout.com/scripts/extraire-urls-google.php

Articles liés :

Commentaires (29)

Catégorie: Scraping,Scripts PHP


29 Commentaires

Commentaire par Mode enfant Magazine

Dimanche, 26 octobre , 2008 à 23:38

Bon script ;)
Attention cependant au captcha pour requêtes automatisées :)

Commentaire par admin

Lundi, 27 octobre , 2008 à 0:06

Yep à utiliser en local si ip variable ou faire tourner sur différents serveurs ou passer par proxy ou ne pas abuser… ou connaitre les techniques secrètes ;)

Commentaire par tictact

Lundi, 27 octobre , 2008 à 12:52

très bon script
thanks paulo

Commentaire par guizme555

Lundi, 27 octobre , 2008 à 17:46

Merki encore une fois pour ce script :) Je fais tourner !

Commentaire par Rudy

Mardi, 28 octobre , 2008 à 22:14

Yo :)

En voyant le titre je me suis dit cool voila du contenu :p
Mais en testant je me suis rendu compte que le script recupère les url uniquement,a quoi ca sert ?

J’ai cru qu’avec on pouvait choper le contenu des 1ers pages de résultats

Commentaire par Louis-Philippe Huberdeau

Mardi, 28 octobre , 2008 à 22:25

Tu peux te sauver beaucoup d’effort en utilisant les API

Commentaire par admin

Mercredi, 29 octobre , 2008 à 2:10

@Louis-Philippe Huberdeau : l’api est intéressante, mais pas pour l’usage souhaité ici, api limitée…

@Rudy, ça sert à te faire de belles listes d’urls à spammer automatiquement par exemple.

Commentaire par lo

Mercredi, 29 octobre , 2008 à 9:28

Parfait. Merci pour ce script !

Commentaire par Karedas

Mercredi, 29 octobre , 2008 à 13:37

J’ai cru qu’avec on pouvait choper le contenu des 1ers pages de résultats
Une fois que tu as les urls stockés, facile de faire un script spider qui va les explorer et en extraire le contenu.
Il vaut mieux éviter extraction google et crawl en meme temps sans quoi t’en a vite pour plusieurs minutes de travail par recherche.

Je suis très, mais alors très très, surpris que SEO BLACKOUT ne sache pas que, pour éviter le ban de l’ip par google, il suffit de remplacer ‘search’ par ‘custom’.

Commentaire par admin

Jeudi, 30 octobre , 2008 à 0:11

T’inquiètes Karedas, on utilise custom aussi qui au passage n’est pas suffisant, il ne suffit pas de remplacer custom par search, il y a d’autres paramètres à passer pour ne pas se faire bloquer mais ça on le garde en interne, ou alors je laisse le développeur du script le présenter sur SEO Blackout s’il le souhaite ;) (mais ça m’étonnerait qu’il accepte…)

Commentaire par BlackMelvyn

Vendredi, 31 octobre , 2008 à 16:35

En effet, même s’il y a un intérêt pédagogique très important, les meilleures astuces Black Hat sont aussi les moins connues ;)
Peut-être que nous présenterons le script plus tard car la méthode est intéressante, mais pour le moment, c’est un peu trop précieux à mes yeux pour le dévoiler au public… et n’oublions pas qu’ici c’est aussi Don’t be evil
Sorry ;)
Je pense cependant que Paul en a méchamment aidé ici avec ce script y’a plus qu’à :lol:

Commentaire par Jice

Mercredi, 4 février , 2009 à 19:56

Je viens de me mettre au python, et j’ai voulu commencer par l’adaptation de ce petit script. Le résultat est à voir ici :
http://jice.lavocat.name/blog/2009/02/extraire-urls-des-resultats-google-en-python/

C’est pas un beau rendu dans une page web, mais ça m’a suffit pour apprendre les bases (récupération url, traitement avec Regexp…).
Le script a été un peu modifié pour contourner des problème que j’ai pas résolus autrement. Mon code est donc ‘sale’. Si vous avez des commentaires enrichissants à faire je suis preneur. De même qu’un bon plugin de Geshi pour WordPress…

Commentaire par admin

Jeudi, 5 février , 2009 à 22:14

Salut Jice,

Je peux pas dire grand chose sur ton script vu que je connais pas python :)
Par contre merci pour le lien ;)

Pour le plugin wordpress, je peux te proposer WP-Syntax (c’est celui que j’utilise ici) :
http://wordpress.org/extend/plugins/wp-syntax/

Commentaire par Tigrou

Mercredi, 17 juin , 2009 à 9:09

Bonjour,

Je me demandais si l’api google search permet d’éviter le ban de l’ip par google?

Merci pour vos lumières

Commentaire par Olivier

Dimanche, 26 juillet , 2009 à 9:03

Pour ma part, j’ai créé un script pour connaître la position de son site sur Google pour un mot clé donné : http://www.olivier-tassel.fr/outils/script-position-site-google-mot-cle

Commentaire par Jack

Mardi, 8 septembre , 2009 à 21:22

De la balistique.

- Exactement ce que je cherchais ; je cherche à faire un petit prototype de la même veine en Perl, suis penché sur le pb depuis plusieurs jours, mais ne vois toujours pas comment utiliser cURL ou libcurl pour extraire des URL de retours de requête Google ; en effet le source des pages de requête Google ne fournipas d’URL, mais plutôt des clés internes (à Google) pour chaque URL.

Cf par exemple, sur un shell :
curl ‘http://www.google.fr/search?source=ig&hl=fr&rlz=&=&q=ma+requete&btnG=Recherche+Google&meta=lr%3Dlang_fr&aq=f&oq=’

- Louis Philippe : il est vrai que des tas d’interfaces, dans tous les langages, sont à disposition sur code.Google pour interroger la « Google Base API ». Les résultats sont donnés sous formes de flux XML, dans un format XML propre à Google : on peut alors exploiter les retours de requête Google de manière extrêmement fine, mais ça m’a l’air fastidieux. Utiliser cURL comme ici, en manipulant directement la syntaxe (http) des pages de resultat Google, me semble au contraire infiniement plus simple.

@+ Bravo pour ton code, qui a un intérrêt énorme par rapport à ce qu’on trouve d’autre sur le sujet : il marche très bien !!! :(

Commentaire par Stéphane

Lundi, 22 février , 2010 à 8:56

Salut,

J’aurais aimer savoir quelque chose avant tout, est ce que google autorise ce genre technique à parser leur résultat ?

Car au final ou pourrait presque en allant loin des les regex ce faire son propre moteur. Et puis ont utilise leur requêtes.

Risque ton quelque chose si il repère cela ? Risque ton d’être backlisté ou quelque chose du genre ?

J’ai éssayé celui de Bing, ma foi bien et facile à mettre en place, sauf le nombre de résultat par page.

Enfin merci de votre réponse.

Bye

Commentaire par Expert

Mercredi, 7 avril , 2010 à 10:34

Bonjour,

Pour ma part, je l’ai mis en place sur un serveur FTP.
Mais lorsque je lance une requête, il ne m’affiche rien sous « Google Results ».
cela marche-t-il toujours pour vous ?

Commentaire par nicolas laustriat

Vendredi, 7 mai , 2010 à 13:05

Ah! j’utilise cet extract depuis sa publication, il a toujours bien focntionné. Mais depuis hier nada…est ce que cela aurait un rapport avec la sortie « officielle » de Jazz?

Commentaire par oups

Mercredi, 12 mai , 2010 à 16:31

Le script ne semble plus fonctionner depuis la nouvelle interface de Google.
Dommage le script était assez efficace et simple à mettre en place…

Commentaire par Emma

Lundi, 17 mai , 2010 à 18:14

Re-Bonjour,

Désolée pour le « spam », je pense avoir compris pourquoi je n’arrive pas à utiliser vos scripts, cela doit être à cause de la nouvelle version de Google.
Pouvez vous m’indiquez ce qui est à modifier dans chaque script (surement la même chose, ceux-ci utilisant tous le scrap sur google).

Merci :)

Commentaire par victor

Mardi, 18 mai , 2010 à 11:51

Ca ne fonctionne plus
google a changé quelque chose !

a voir svp !

Commentaire par mac97000

Samedi, 22 mai , 2010 à 15:00

Euh …

sauf erreur de ma part il suffit de remplacer :

$regex='<h3 class=r>';

par

$regex='<h3 class="r">';

à la ligne 9 pour revoir apparaitre la liste des liens …

Commentaire par nicolas laustriat

Mardi, 25 mai , 2010 à 10:58

Yes ca marche merci MAC97000

Commentaire par mac97000

Mardi, 25 mai , 2010 à 11:35

pas de quoi, en même temps j’ai pas fait grand chose puisque je testais le script ;)

Commentaire par Remguy

Vendredi, 23 juillet , 2010 à 17:28

Personnellement j’ai pas réussi à le faire tourner…

Commentaire par laustriat

Mardi, 28 septembre , 2010 à 22:26

yep définitivemant c’est un script que j’utilise régulièrement il est top mais je sais pas si vous avez vu ca aussi (du jour via @rudy su twitter)? http://blog.authoritylabs.com/data-collection-with-google-spreadsheets/

j’ai comparé les résultats (on ne siat jamais) c’est conforme…

Commentaire par Daniel Roch

Jeudi, 24 novembre , 2011 à 16:26

Le script ne fonctionne plus ?

Sur mon serveur, il ne me renvoie plus aucune donnée…

Commentaire par Jocalaz Allan

Mardi, 24 janvier , 2012 à 12:27

Bonjour,

Est-il possible de récupérer le title affiché par Google. En effet je cherche à travailler un site client qui a 200 URLS indéxées, grâce à ce script je récupère toutes les urls, mais j’aimerais récupérer les titles pour un travail dessus ..

Les commentaires sont fermés pour cet article.



SEO BLACKOUT

Site web dédié aux techniques de référencement et de positionnement de sites web sur Google.

Certaines parties du site sont en accès restreint, ces espaces sont réservés à la SEO Black Hat Team.


Don't Be Evil !