Scraper le web à grande échelle
(incolumitas.com)-
Si l’on créait un service qui exécute des millions de recherches Google, il faudrait une alternative qui ne se fasse pas bloquer
-
Le plus simple est d’utiliser des proxys payants, mais c’est assez coûteux
→ D’où ce billet intéressant où l’auteur détaille les approches qu’il a essayées
- Au départ, il utilisait AWS Lambda + Puppeteer
→ AWS propose 16 régions dans le monde, et après 3 exécutions de Lambda, une nouvelle IP est attribuée
→ En lançant 1 000 Lambdas en parallèle, on utilise environ 250 IP publiques
→ 16 régions * 250 = 4 000 adresses IP, ce qui suffit pour effectuer des recherches Google à l’échelle du million par semaine
→ Il a aussi essayé sur GCP, et c’est assez drôle : Google bloque plus agressivement les IP de son propre cloud (par rapport à AWS)
→ Cela concerne la période 2019~2020, donc cela a pu changer
- Cette méthode peut servir à scraper Google / Bing / Amazon, mais elle a ses limites
→ Elle ne fonctionne pas si la cible utilise des sociétés anti-bot comme DataDome, Akamai ou Imperva
→ Elles détectent si c’est un bot grâce au browser fingerprinting, avec des méthodes extrêmement variées
→ Google Picasso, fingerprinting Font/TLS/WebGL...
→ En réalité, la plupart des services de scraping à grande échelle utilisent le cloud + des conteneurs Docker, donc ils sont faciles à identifier
- Une infrastructure de scraping évolutive et difficile à détecter
→ Deux règles pour réussir à scraper efficacement
-
Ne pas falsifier la configuration du navigateur
-
Et surtout, ne falsifier la configuration du navigateur que si « personne ne peut s’en apercevoir »
→ La conclusion est que, pour cela, le mieux est tout simplement d’« utiliser de vrais appareils »
⇨ Acheter 500 appareils Android bon marché auprès de plusieurs fabricants et souscrire à des forfaits data peu chers
⇨ Les répartir dans plusieurs villes (près des antennes)
⇨ Utiliser des outils open source comme DeviceFarmer/stf pour contrôler les appareils en parallèle
⇨ Installer un OS léger comme Android Go et activer le mode avion toutes les 5 minutes afin d’obtenir sans cesse de nouvelles adresses IP
⇨ « 4G carrier grade NAT » : un NAT opérateur 4G conçu pour éviter l’épuisement des adresses IPv4, où des centaines de milliers d’utilisateurs partagent la même IP, ce qui rend le blocage impossible
→ Il y a toutefois beaucoup d’inconvénients : il faut acheter 500 appareils Android, trouver où les installer, assurer la maintenance matérielle, etc.
- Amélioration : émuler Android
→ Au lieu d’acheter des appareils Android, pourquoi ne pas utiliser Android-X8, Bluestacks ou l’émulateur Android Studio ?
→ Proxidize permet de créer des proxys mobiles 4G
→ Installer 50 dongles 4G sur un seul serveur
→ Émuler 50 à 100 appareils Android sur chaque serveur
→ Installer ces stations dans 5 villes
→ Gérer ces stations avec des commandes shell robustes
12 commentaires
Les proxys, les services de scraping, les logiciels anti-bot, etc., sont bien récapitulés dans l’article ci-dessus.
Quel hack génial !
https://www.diffbot.com/products/crawl/
Il existe aussi des services qui font du scraping de pages web via le crawling. Les données scrapées sont enregistrées en JSON après exclusion des informations inutiles.
Ça alors...
Cela n’a rien à voir, mais…
Il existe aussi des services comme https://serpapi.com/ qui vendent une API pour la recherche Google.
Mais ici, ils vendent aussi une API pour la recherche Naver, haha.
https://serpapi.com/naver-search-api
Le prix étonnant ? 250 $ pour 30000 recherches par mois.
Est-ce surprenant parce que c’est trop cher ? Je n’arrive pas à me faire une idée.
Oui, c’est extrêmement cher. Comparé à l’utilisation de proxys payants, par exemple.
Comme c’est une API, c’est pratique car il n’y a pas à craindre un blocage.
Dans le contexte français, ça me fait penser aux forfaits mobile MVNO à 0 € qui offrent quand même un certain volume de données...
Mais comme il est difficile de souscrire en masse, ça risque d’être compliqué aussi.
Dans le cas de Google Fi, il est possible d’ajouter jusqu’à 4 cartes SIM de données supplémentaires sur une seule ligne, donc cela pourrait aussi être une solution.
Quand j’avais déjà tenté de scraper quelque chose sur naver,
je me souviens que cela ne fonctionnait pas sur AWS Lambda mais que ça marchait sur GCP Functions,
et je pensais que c’était parce que leur plage d’IP était ouverte, mais apparemment ce n’est pas le cas non plus.
J'utilise déjà la méthode n°1, donc j'ai regardé quelles autres méthodes existaient… je n'y aurais jamais pensé.
En fait, la solution n°1 avec Lambda+Puppeteer semble aussi tout à fait correcte si on l’utilise de cette façon,
mais comparée à la méthode Proxidize mentionnée à la fin, il y aura probablement une différence de coût selon l’ampleur du scraping.
Plus le volume nécessaire est important, plus Proxidize sera sans doute stable, mais pour faire simple, la solution n°1 ne me paraît pas mauvaise non plus.
Le https://proxidize.com/ présenté à la fin est intéressant.
C’est une solution matérielle + logicielle qui permet de créer et gérer soi-même des proxies mobiles 4G.
La version avec 5 dongles est à 399 $. En voyant que la Corée figure dans la liste des pays utilisateurs, j’imagine que c’est utilisable ?
Ce n’est pas tout à fait du CGNAT, mais il existe aussi des solutions comme Scrapoxy pour gérer tout un pool de proxies logiciels.