Mutualisation scraping immobilier : Seloger, Leboncoin & co

Bonjour,

De nombreux prestataires et clients proposent/cherchent à scrapper de la donnée immobilière.
Tout le monde travaille dans son coin et réinvente sa propre roue.

Je cherche à m’associer à un ou plusieurs intervenants pour mutualiser les coûts liés au scrape d’annonces immobilières à l’échelle nationale.

Ce message s’adresse donc à tous les acteurs qui auraient un projet de scrape immobilier mais surtout à ceux qui ont déjà la donnée et qui souhaiteraient amortir leurs charges…

On en parle ?

Bien à vous,

Pierre-Jean

Hello, c’est quoi les bénéfices de ta collaboration?

Re,

En fait je cherche à m’associer à d’autres personnes qui ont le même besoin que moi pour constituer cette grosse BDD et mutualiser les coûts pour faire tourner et maintenir la solution.

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

2 « J'aime »

Intéressant ton retour d’expérience ! En effet les techniques ont beaucoup évolués. Il ne suffit plus de faire un get sur la page pour récupérer les informations. Il y a une expertise sur les empreintes et les anti-bots pour ne pas se faire attraper.

Incroyable REX ! Une question un peu noob peut-être ?

Est-ce qu’un scraper avec un modèle de ML basé sur la reconnaissance d’image (comme celui de Google) ne permettrait pas de faire un scraper qui ne périme pas ?

Genre le modèle est entraîné à repérer des infos et si elles changent de place ou de format comme une maj du front le scraper n’est pas impacté.

Ha ha ha ! Alors j’ai 30 ans, jadis équivaux à deux ans, j’étais sur puppeteer à résoudre les captcha google de LBC tout de même. Oui j’ai vu pour les fingerprint, je travail sur un module à puppeteer pour se remettre à niveau par rapport à CreepJS. Au plaisir de partager et de s’améliorer ensemble !

Thanks ! On me paie un salaire mensuel à 5 chiffres pour trouver des solutions et les développer quand personne n’est chaud, du coup ici c’est du fun pour décompresser et occuper mes pauses.

Il n’y pas de question noob, encore moins si elle concerne du ML. Il y a 4 ans j’ai justement voulu créer un scraper qui crawlait toutes les agences immobilières de france plutôt que de passer par les plateformes qui n’avaient pas forcément toutes les annonces (qui facturent par mois par annonces). Et en fait ça représente beaucoup trop de requête, de cas particuliers et de volumes de données à traîter…

Je pense que c’est plus interessant d’avoir une série de bots aux taches bien définies, avec un code intelligent, polyvalent et optimisé, plutôt que de s’engouffrer dans les abîmes du ML disponible (même s’il peut être utilisé sur des points précis, mais pas pour le scraping automatique). Crawler le web aujourd’hui à la google c’est une sacré infra, mais je n’ai pas la vérité absolu, au plaisir de lire les avis contraires.

Il y a beaucoup de ML disponibles, mais suivant celle utilisée il faudra beaucoup de temps pour l’entraîner, qu’elle match pour tous les cas de figure et corriger les cas particuliers… Même avec les pseudo avancées qui existent en fait depuis bien longtemps, c’est complexe, après rien d’impossible.

« melo.io » essaie d’avoir cette approche avec de l’IA, mais si sur leur page d’accueil ils affichent fièrement 900 plateformes d’annonces immobilières c’est qu’ils n’ont pas réussi à concevoir un modèle qui peut taper les 30.000 agences immobilières de france. Du coup l’IA pour lire le contenu ça me va, pour le scraping automatique, j’émet un doute.

Après il y a 6 ans j’ai voulu me mettre au ML et comme tout ce que je fais par passion, sur le temps perso : je créer un produit from scratch avec idéalement aucun module ou framework. Je le dev et re-dev plusieurs fois puis ensuite je regarde ce qui existe déjà. Du coup ça permet de penser et créer autrement sans être trop influencé par le reste, contrôler également la moindre ligne de code permet une optimisation dingue (coûts serveurs, stockage, services, résolution de pb…). Par contre ça prend un temps monumentale, mais t’apprends énormément !

Du coup je reprend, il y a 6 ans, j’ai voulu apprendre le ML, j’ai donc lu 3 articles de blog et créé une série de bots qui récupéraient, traîtaient et regroupaient toutes les informations sur les rencontres avenirs dans le football. Puis une fois que j’avais un historique de 30.000 matchs, j’ai créé un script qui essayait de trouver des marqueurs mathématiques de réussite entre les trois solutions suivantes : équipe 1 gagnante, équipe 2 gagnante ou égalité. La donnée la plus importante était bien évidement la côte des bookmakers pour que le modèle mathématique soit rentable en pariant sur ces 30.000 matchs. Bon j’ai réécrit pas mal de fois le projet car 30.000 matchs avec des dizaines de milliers d’infos sur chacun, le temps d’exécution était, disons intéressant… J’ai du appeler IBM US pour profiter de leur beta de serveur avec les 6 dernières nvidia tesla pour 40$ de l’heure afin de balancer mes scripts python en GPU pour trouver les marqueurs les plus rentables. Je suis sur qu’il y avait d’autres solutions, mais j’avais mes marqueurs sur mon modèle de données et en suivant ces marqueurs tout en récupérant de la même façon mes infos, je suis passé de 15.000€ placé sur 3 bookmakers à 45.000€ 30 jours.

Je ne pense pas qu’une solution de l’époque m’aurait apporté quelque chose, un script bien écrit et dédié à une problématique sera plus perfomante que des modèles un peu génériques disponibles pour comparer deux radios du colon et connaître en même temps la valeur boursière de l’ETH dans 42 secondes. Watson d’IBM est mono-tâche, du moins imbrique plusieurs « IA » mono-taches.

1 « J'aime »

Je suis désolé j’ai créé un gouffre disgressionel®, j’espère apporter des infos pour ton projet et je te souhaite de réussir à monter la dream team.