Salut,
Si tu ne veux pas réinventer la roue tu as déjà quelques api dispo : melo, piloterr, lobstr, fluximmo…
J’aime tout controller de mon code donc je préfère créer ma solution, mais visiblement les derniers anti-bots ont évolués, je dois refaire ma partie scrapers qui fonctionnait jadis.
Les proxies permettent de s’épargner pas mal de paramétrages sur tes bots en passant pour ne pas se faire repérer mais tu vas payer au traffic (GB utilisé) et suivant l’actualisation des annonces ça peut vitre revenir un gouffre…
Du coup :
Sachant que si on se concentre sur les offres de particuliers (oui les annonces pro autant les récupérer sur les plateformes moins protégés de toute façon les agences publient partout voir avec plus d’infos que LBC), aujourd’hui tout immo confondu de LBC, nous sommes à 190k annonces. On les veut le plus à jour possible, sur le site il affiche 35 annonces par page et si on crawl toutes les pages on sait si une annonce à disparu, on s’évite alors les 190k de requêtes pour passer à 5,5k (190/35).
Après il me faut le contenu de l’annonce car j’ai des scripts qui traîte le contenu (genre recompte les pièces, le total de terrain, le total de chambres, s’il y a des attributs sympas (forêt, étang, calme…), reclasse ensuite le bien (chateau, manoir, usine, hangars, garage…) et autres mots clés), je veux aussi les infos de geoloc.
Les annonces sont retirées après 2 mois d’inactivité ou republiées si mise à jour, donc on actualise uniquement le contenu des nouvelles annonce soit 3,2k (190/30/2) de requêtes supplémentaires en moyenne. On arrive à 8,7k de requêtes (et encore lors de la fin d’année on a moins d’annonces immo), ensuite on peut filtrer un peu car les annonces de paris sont plus souvent sollicitées que celle de Lens.
Il nous faut une navigation pseudo naturelle pour éviter d’être spotted et une ip qui change à chaque detection, donc un VPN c’est pas mal car peu onéreux et traffic illimité. Si on veut notre DB à jour tous les jours en partant des 8,7k non optimisées, on aurait 6 requêtes minutes (8700/24/60), comportement humain acceptable. Maintenant si ont les veut toutes à jour à l’heure prêt on est à 145 requêtes minutes (8700/60), donc on prend 15 serveurs (des instances cloud virtuelles) et on tombe sur les ~10 requêtes minutes par scraper.
Alors attention plus d’annonces publiées en journée que la nuit et on est pas à l’abri de protection du type nous retourner de faux résultats en cas de detection. On met différents VPN sur nos instances pour mesurer l’efficacité et on change d’IP toutes les random*200+100 requêtes puis relance le navigateur pour effacer nos marqueurs.
On met une DB elasticsearch en parallèle pour regrouper tout le contenu de nos bots et pouvoir ensuite retrier, reclasser et construire une jolie data requêtable ! On en profite pour ajouter un index avec l’historique de chaque step exécutées par nos bots pour savoir où et quand ça merde pour réajuster sur le volume :).
Il me manque juste la MAJ de mes scrapers, le reste est bon. Je ne sais pas si j’y arriverais, ou plutot si j’aurais assez de motivation à combattre les anti bots, surtout qu’il faudra actualiser régulièrement pour patcher leurs patchs. Mais pour le moment ça me plait de trouver la résolution de chaque detection petit à petit, best tester : Creepjs.
Ensuite tu refais la même pour les autres sites et tu utilises ton script maison pour regrouper les annonces identiques, mais le plus complexe pour moi c’est le temps passé à MAJ ton antibot…
Il y a d’autres approches que celle-ci bien evidement, je serai ravi d’en avoir d’autres si vous avez ! « Horiz io » ont la chance d’avoir pas mal de users et le géni d’avoir créé un petit plugin qui estime la rentabilité du bien en live sur la page, mais du coup ils en profitent pour MAJ leur DB à chaque call des users du monde entier. Coup de géni, les annonces les plus vues sont actualisées et il detecte le retrait de l’annonce.
En espérant avoir aidé, éclairé ou intrigué un peu, au plaisir de partager en communauté.
EDIT : Petit rappel sur un warning juridique : Is Web Scraping now legal ? - #18 par Wyatt