Il y a des jours où la malchance vous pousse à des besoins improbables, comme récupérer le contenu de son site après un drop de la base de données… et sans backup évidemment, sinon ce serait trop simple ! Oui, ça existe et Rémi peut en témoigner.
HELP : quelqu’un aurait une idée pour scraper et récupérer les contenus d’un site depuis le cache google (environ 200 URL) ? C’est un ami qui a supprimée sa BDD et a AUCUNE save 😂
— Rémi Nestasio (@reminestasio) 21 novembre 2018
Par chance je n’ai jamais eu à devoir faire ce travail mais le cas proposé par Rémi est suffisamment intéressant pour publier un post sur une solution envisageable.
L’efficacité de la méthode va probablement dépendre également du nombre de pages à récupérer, car on va devoir éventuellement “requêter Google” plusieurs fois pour récupérer dans un premier temps toutes les Urls de cache. Dans un second temps il faudra aussi accéder à chacune des URLs de cache (pour récupérer notre contenu), et là encore en fonction du nombre pages une solution avec proxys va s’imposer, et donc pour le faire en php il faudra utiliser curl.
Dans un cas comme celui proposé par Rémi (avec relativement peu d’URLs), une fois les URls de cache récupérée (et reconstruite) un Screaming Frog avec une vitesse de crawl très basse pourrait suffire (…mais à vérifier tout de même).
Le script ci dessous n’est pas parfait, il ne prévoit pas l’utilisation de curl pour se connecter avec des proxys, pourtant c’est un cas de figure où probablement on va en avoir besoin, je vous propose surtout une mécanique et j’avais besoin de faire vite. D’ailleurs si quelqu’un veut ajouter cette brique, j’aime autant (plus sympa et backlink gagné facilement), autrement je compléterai ce billet moi même plus tard.
Ce script contient actuellement :
1/ Une requête simple pour récupérer les résultats de Google avec une commande site:domaine.com (basique)
Sur un petit site (200, 300 pages, ça peut faire l’affaire). Pour les sites plus gros, par exemple un e-commerce avec 3 000 produits, déjà j’ai du mal à croire que vous n’ayez pas de backups mais dans un cas comme celui là rien que la récupération des pages indexées sur Google exigerai plus de finesse, en segmentant les requêtes site: par catégories par exemple (ce qui en fonction de vos URLs n’est pas toujours possible)…
2/ La récupération des Urls de cache
3/ La reconstruction des URls de cache pour palier au problème récent du cache Google (…grâce à l’astuce proposé par notre ami Johnny)
Someone on Twitter noticed you can make it work if you change the cached page URL after clicking in search. I don’t know if that always works, but it’s a cool hack. https://t.co/NXjxmC8tdP
-> https://t.co/8sFmkyVAJq— 🍌 John 🍌 (@JohnMu) 8 octobre 2018
4/ Une fonction de connexion à l’URL de cache et la récupération de notre code html
Bref ne nous attardons pas plus, voici le petit bout de code en question, en espérant que vous n’en ayez jamais besoin, à moins que ce soit pour autre chose 🙂
Script PHP pour récupérer le contenu mis en cache par Google
<?php $domain = 'domain.com'; $doc = file_get_contents('http://www.google.com/search?q=site%3A'.$domain.'&num=100'); $doc = mb_convert_encoding($doc, 'HTML-ENTITIES', 'UTF-8'); $dom = new DOMDocument(); @$dom->loadHTML($doc); $xpath = new DomXpath($dom); $cache = $xpath->query("//a[contains(@href,'http://webcache')]/@href"); foreach($cache as $key => $url){ sleep(2); $cacheId = preg_replace('#(.*)cache:#i','',$url->value); $cacheId = preg_replace('#:http.*$#i','',$cacheId); $cacheUrl = 'http://webcache.googleusercontent.com/search?q=cache:'.$cacheId.':x.xyz'; $cacheContent = recoverContent($cacheUrl); // un debug pour voir le contenu /* if ($key==0){ echo '<textarea>'.$cacheContent.'</textarea>'; } */ } function recoverContent($cacheUrl){ $cacheContent = file_get_contents($cacheUrl); $cacheContent = explode("\n",$cacheContent); unset($cacheContent[0]); $cacheContent = implode("\n",$cacheContent); return $cacheContent; } ?>
Hello Walid,
Alors déjà, je tiens à te remercier pour cet article avec un timing miraculeux ! Haha. Sans rire, je pouvais pas rêver mieux !
Concernant Screaming Frog, j’ai bien évidemment testé, et en effet ça passe au début mais on est très vite bloqué par les captchas Google… 🙂 Je pense qu’il faut bien finir par utiliser des proxys, ou alors être patient et faire petit à petit…
L’avantage de Screaming Frog est qu’on peut facilement extraire des zones de contenus précises (par Xpath par exemple) au lieu de récupérer tout le html en brut. Ça fait gagner du temps. Mais je suppose que cela serait également intégrable à ton script.
Du coup, voici ce que j’ai fais pour mon cas précis avant ton article, il s’agissait d’un wordpress où la personne à carrément delete la BDD “par erreur” (dans le plus grand des calme, sans aucun backup). La “chance” que j’ai eu c’est qu’il y avait moins de 300 URLs.
– Passage de la SERP Google à 100 résultats
– Scrap des URL dans la SERP avec le plugin Chrome “Cool SEO”
– Extraction uniquement des URL du cache Google
– Crawl Screaming Frog en mode liste à 1 URL/seconde max
– Ajout d’un custom extract avec un XPATH sur la zone de contenu WordPress
– Ca donne un excel avec toutes les infos, que je retraite selon les besoins et que je match avec l’outil d’import WordPress.
Hop, on arrive à retrouver un semblant de base article sur son Wordpres… Bien sur il reste toujours des déchets et des éléments à gérer, comme les images etc etc… Mais c’est un bon début quand derrière il y avait des années de boulot !
A + et encore merci pour ta réactivité et cet article 🙂
Rémi
De rien Rémi !
C’est exactement ce que je pensais pour Screaming Frog, d’ailleurs as tu réussi au final à contourner le captcha ? A quelle nombre d’URL/seconde tu as du descendre pour que ça marche ?
Custom extract effectivement indispensable ici, et oui c’est facile d’identifier les zones à extraire en php, il y a différents sélecteur pour ça, xpath par exemple si tu as l’habitude de le manipuler avec SF
Pour mon cas, j’ai réussi à arriver à tout scraper en espaçant en 3 – 4 crawls.
Le premier crawl a réussi à scraper 98 URL d’un coup sans blocage ! C’est après que ça a été plus compliqué. J’étais à 1 URL par seconde max. Je suis aussi aller résoudre des captchas à la main entre temps sur Google ^^
Cache Yandex en alternative
Hello Laurent, intéressant on pense presque jamais à Yandex ou autres moteurs du coup je viens de tester, et bien comparé à Google c’est pas la fête à mémé avec les russes qui m’ont bloqué direct.
Le coté positif c’est que ça te pousse à hausser le niveau et à tester les autres technos pour tenter de bypasser les sécus. A part le cache je suis sur qu’il y a un tas de trucs intéressants à creuser avec Yandex.
WHouuuua, si j’avais su il y a 1 an, j’aurai fait le même tweet que Remi ^^
Merci en tout cas super pratique 😉
Merci pour le script et la technique.
En passant par la waybackmachine avec un script ou un tool :
Web archive downloader ça ferait l’affaire je pense aussi.
Super article ! merci pour le script c’est cool 🙂
Hello,
J’ai fait ce petit script pour récupérer les images via l’export Screaming Frog et la WebMachine si ça intéresse quelqu’un : https://pastebin.com/KLJxmQmw
(Comment ça j’ai eu le soucis? :p)