• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar

Hacker ScreamingFrog pour crawler le web avec

16 November 2019 by Walid Gabteni 3 Comments

Salut à toutes et à tous ! Que vous soyez SEO confirmés, référenceurs en herbe, simple curieux et pas SEO du tout d’ailleurs, j’aimerai vous montrer quelque chose qui peut s’avérer très utile. Voici une méthode pour transformer ScreamingFrog (qui est déjà un excellent crawler) en un spider digne de Googlebot, MJ12, etc. Augmentons ScreamingFrog.

ScreamingFrog serait-il donc un crawler indigne ?

Screamingfrog hack

Loin de moi cette pensée, ScreamingFrog est un excellent outil, il fait très bien ce pourquoi il a été pensé : crawler des sites web et récupérer de la data.

Repousser la limite de ScreamingFrog

La limite de ScreamingFrog que l’on s’apprête à repousser est qu’il n’est pas fait pour crawler le web. Imaginez tout ce que l’on pourrait faire avec s’il pouvait se balader sur internet. Trouver des tonnes de domaines expirés est peut être le premier avantage qui vous vient à l’esprit, mais on pourrait faire beaucoup plus…

De base, lorsque ScreamingFrog trouve un lien externe, il tente de s’y connecter, puis vous renvoie un code de réponse vous permettant d’identifier les liens cassés, mais il s’arrête là, il ne va pas plus loin, c’est là la limite que l’on va essayer de repousser en débridant ScreamingFrog.

Nous allons donc le forcer à ressembler à des spiders comme Googlebot, Bingbot, MJ12 (le spider de majestic) qui suivent inlassablement les liens externes.

Est-ce que l’on va vraiment crawler internet avec ScreamingFrog ? Théoriquement il en sera capable, mais en pratique il ne faudra pas trop s’enflammer et je vous invite à paramétrer une profondeur de crawl maximale… je dis ça pour les fougeux.

Pour paramétrer une limite de crawl ouvrez ScreamingFrog et rendez-vous dans
Configuration > Spider.

Dans la fenêtre qui s’affiche, cliquez sur le deuxième onglet “Limits” et cocher la case “Limit Crawl Depth” avant d’indiquer la profondeur de votre choix (voir figure ci-dessous). Rappelez-vous bien… qu’il ne faut pas vous enflammer. Si vous paramétrez le niveau maximal de profondeur à 5 c’est déjà balaise. Çà dépend aussi du type de sites que vous crawlez et de leur habitude de faire ou non des liens externes. Ce qu’il faut savoir c’est que c’est exponentiel, la différence entre une profondeur de crawl paramétrée à 3 et une paramétrée à 4 est juste… énorme !

Fenêtre de réglage de la profondeur de crawl sur ScreamingFrog

On est obligé d’utiliser ScreamingFrog pour faire ça ?

On pourrait parfaitement utilisez Xenu me direz-vous… c’est juste ! Retenons juste que ScreamingFrog récupère pas mal de données intéressantes, or Xenu ne sait pas faire. Aussi, au delà de “hacker ScreamingFrog” l’astuce ouvre des portes très intéressantes à explorer mais sur lesquelles je ne m’attarderai pas ici. Si des idées vous passent par l’esprit, on peut en parler dans les commentaires.

Bref, comment transformer ScreamingFrog en un outil qui va crawler le net ?

On ne va pas bidouiller dans le code source de l’outil, on va plutôt utiliser un combo, ScreamingFrog + un script PHP qu’on peut appeler infinite-crawl.php. Je vous offre les bouts de code qui vont bien mais en soi ce n’est pas ce qu’il y a de plus important, c’est le principe qu’il faut comprendre.

Comme je vous le disais ScreamingFrog ne suit pas les liens externes, mais seulement les liens internes. Il faut donc s’arranger pour lui montrer les liens externes comme si c’étaient des liens internes ! Hein ? Pas de panique.

Supposez que l’on veuille crawler le web en partant du site lemonde.fr. On ne demande pas à ScreamingFrog de crawler le monde.fr mais plutôt notre script à cette URL par exemple : http://localhost/infinite-crawl.php?uxx=https://www.lemonde.fr.

Lorsque ScreamingFrog va tenter d’accéder à cette URL, notre script va récupérer tous les liens (internes & externes) situés sur la page d’accueil du site lemonde.fr, et va les réécrire avant de les présenter à ScreamingFrog pour que ce dernier ne voit que des liens internes comme ceci.

?uxx=https://www.lemonde.fr/idees/article/2019/11/16/jean-pisani-ferry-n-attendons-plus-notre-salut-de-francfort_6019395_3232.html	
?uxx=https://codespromo.lemonde.fr/	
?uxx=https://formation-professionnelle.lemonde.fr/	
?uxx=https://secure.lemonde.fr/sfuser/newsletters	
?uxx=https://www.lemonde.fr/societe/article/2019/11/16/les-gilets-jaunes-veulent-rallumer-la-flamme-un-an-apres-leurs-debuts_6019430_3224.html	
?uxx=https://dicocitations.lemonde.fr/  
?uxx=https://paroles2chansons.lemonde.fr/top-video  
?uxx=http://jeux.lemonde.fr/    
?uxx=https://www.courrierinternational.com/ 
?uxx=http://www.sdllemonde.fr/  
?uxx=http://www.lavie.fr/   
?uxx=https://www.huffingtonpost.fr/ 
?uxx=https://www.nouvelobs.com/ 
?uxx=https://www.monde-diplomatique.fr/ 
?uxx=https://www.telerama.fr/   

Adapter un Script PHP pour un crawl infini

Dans les grandes lignes, avant de vous présenter les bouts de code voici comment le script doit fonctionner si on appelle l’url infinite-crawl.php?uxx=https://www.lemonde.fr

Première chose, le script vérifie qu’il existe bien une variable $_GET[“uxx”] et va récupérer sa valeur (elle se trouve dans l’URL vous voyez ?)

Donc dans ?uxx=https://www.lemonde.fr, on a deux infos. Le nom d’une variable (uxx) et sa valeur (une url)

Une fois que le script connait l’url, sa mission est d’accéder à l’url en question et de récupérer tout le contenu de la page.

Une fois que le script a récupéré le contenu HTML de la page, il doit exécuter un petit travail de transformation sur l’attribut href des liens présents sur la page (liens internes, et liens sortants).

Dès que c’est fait, notre script présente à Screamingfrog le contenu HTML de la page, avec comme seule différence la transformation des attributs hrefs. Pratique !

Concrètement, tous les liens qui pointent vers quelque chose comme https://quelquechose.com sont transformés pour pointer désormais vers infinite-crawl.php?uxx=https://quelquechose.com.

Maintenant Screamingfrog pourra suivre ces liens internes, euhhh externes, bon bref vous avez compris 😉

Voici les fichiers dont vous avez besoin

simple_html_dom.php : Cette classe est un parser php qui va nous aider à trouver facilement les liens pour les manipuler, vous pouvez la télécharger ici

crawlme.php : C’est le fichier qui va se charger d’instancier les classes, vous pouvez le nommer index.php ou comme vous voulez, aucun problème. Ce qui compte c’est le code source que voici. Ces quelques lignes se chargent simplement d’appeler notre script, à part ça elles ne font rien d’autres.

<?php
	include ('infiniteCrawl.php');
	include ('simple_html_dom.php');
	$crawl = new infiniteCrawl();	
	if(isset($_GET["uxx"])){
			echo $crawl->getCont($_GET["uxx"]);
	}
?>

infiniteCrawl.php : ça c’est le fichier qui fait tout. Il casse pas des briques mais il fait le job. Par contre évitez de modifier son nom pour ne pas devoir modifier l’autre fichier

<?php
class infiniteCrawl {

	function __construct(){
		
	}
	
	private function getIt($tURL){
	
		$ch = curl_init();
		curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
		curl_setopt($ch, CURLOPT_HEADER, false);
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
		curl_setopt($ch, CURLOPT_URL, $tURL);
		curl_setopt($ch, CURLOPT_REFERER, $tURL);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
		$resp = array();
		$resp["html"] = curl_exec($ch);
		$resp["info"] = curl_getinfo($ch);
		curl_close($ch);
		return $resp;
	}
	
	public function getCont($url){
			
		$urlComp = parse_url($url);
		$resp = $this->getIt($url);
		if($resp["info"]["http_code"]!==0){
			$html = $this->updateHref($resp["html"],$urlComp["scheme"],$urlComp["host"]);
		}
		else {
			$html = "<title>Pas de Résolution DNS</title>";
		}
		return $html;
	}
	
	public function updateHref($html,$scheme,$host){
		
		$html = str_get_html($html);
		
		foreach ($html->find('a') as $link){
			
			if(preg_match("#^/#",$link->href)){
					$link->href =preg_replace("#^/#",$scheme."://".$host."/",$link->href);
			}
			
			if(preg_match("#^https?://#i",$link->href) && !preg_match("#^https?://(www\.)?(facebook|twitter|linkedin|pinterest|youtube)#i",$link->href)){
				$link->href = "?uxx=".$link->href;
			}
		}
		$html->save();
		return $html;
	}
}?>

Installation / Utilisation du script infiniteCrawl. Facile !

1- Si ce n’est déjà fait, installez un serveur web local (donc sur votre machine). Wamp, Mamp ou Lamp selon votre système…

2- Dans le dossier /www/ de votre serveur local, créez un nouveau sous-dossier. Appelez le comme vous le désirez, appelons le desiree tiens !

3- Dans ce dossier fraîchement créé, (C:\wamp\www\desiree\ si vous êtes sur Windows) créez les 3 fichiers php dont on a parlé juste avant (simple_html_dom.php, crawlme.php, et infiniteCrawl.php)

4- Démarrez votre serveur local

5- Ouvrez ScreamingFrog

6- Configurez Screaming frog pour qu’il ne sorte jamais du dossier /desiree/. Il suffit d’aller dans configuration > include et d’ajouter ceci http://localhost/desiree/.* exactement comme dans l’image ci-dessous :

configuration de screamingfrog

7- démarrez un crawl sur l’URL http://localhost/desiree/crawlme.php?uxx=http://www.sitedetonchoix.com

8- Pour aller plus loin vous pouvez aussi :

  • Offrir un beau backlink à cet article
  • Laisser un commentaire ici
  • Partager, Liker,
  • bref surtout amusez-vous !

Filed Under: Divers SEO

Reader Interactions

Comments

  1. Franklin says

    17 November 2019 at 10 h 57 min

    C’est une super astuce que tu partages là. Avec les script PHP… Bravo

    Reply
    • Walid Gabteni says

      17 November 2019 at 17 h 32 min

      Hello ! Content que cela te plaise, merci pour ton retour !

      Reply
  2. L'agenceweb.com says

    18 November 2019 at 15 h 59 min

    joli tuto 😉 et merci pour le partage…
    On va tester ça de ce pas 🙂

    Reply

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Primary Sidebar

Walid Gabteni : Consultant SEO

Consultant en référencement depuis 11 ans je peux gérer votre stratégie SEO de A à Z.

Audit technique, planification stratégique, mots-clés, netlinking, suivi, formations SEO...
je vous accompagne sur tous les volets de votre référencement naturel.

  • Facebook
  • LinkedIn
  • Twitter
  • YouTube

Top newsletter dans votre mailbox

Pour recevoir par email nos contenus marketing vous avez besoin de nous accorder votre consentement.

Vous pouvez vous désabonner à tout moment ici. Vous acceptez le transfert de vos données à mailchimp pour le traitement.

Synergies fortes et autres projets

Koris : Web Agency à Florence

SEO Hero : Topic Explorer and SEO Analysis

Sur la toile

  • Webladi
  • Qwanturank
  • Top 10 Stratégie
  • Marco Pini
  • Koris : Web Agency Firenze
  • Search Datalogy
  • Aymen Loukil
  • Mickael Challet
  • Korleon Biz

© 2021 · Light On SEO : Consultant SEO, Formation et référencement e-commerce | Mentions légales