Scrapping LBC, obtenir la moyenne des prix

Plus fort même, pas besoin de requête supplémentaire, tout est dans le GET de la page HTML de base :joy:

Si tu cherches la performance autant travailler avec l’API non ?
Chez moi elle répond en 100ms, ça évite d’avoir a parser le html, et ya peut être moyen de modifier les paramètres pour qu’elle renvoit plus de résultats (le limit:35) !

1 « J'aime »

Je viens de tester, on peux demander jusqu’a 100 items par page via l’API :slight_smile:

ça me paraît hyper intéressant ces discussions, si tu as des améliorations sur la version n’hésite pas je suis preneur :slight_smile:

@ScrapingExpert, tu veux pas me faire un exemple complet et précis, si tu as le temps. Je comprend tout ce que tu me dis, mais je n’arrive pas à comprendre techniquement comment tu fais.

Peut etre une vidéo de ton écran, ou quelques explications supplémentaires m’aideraient beaucoup.

KOINKOIN_LBC est la premiere brique d’un crawler de ma conception, et typé : mon crawler n’a pour le moment qu’un comportement :

  • il cherche le nombre de pages maxi
  • il fabrique ses urls pages rayons en fonction des pages maxi trouvées
  • il parcourt les pages rayons et il cherche les urls des pages produits
  • il parcourt les urls des pages produits
    Puis enfin il scrape les pages produits.

Ayant mis en place une telle logique, je travaille maintenant à donner corps à cette logique au travers d’un fichier de configuration pour permettre de rajouter des nouveaux comportements a mon crawler.

Je sais qu’on peut toujours faire toujours plus vite en moins de passes , mais c’est pas ce que je cherche : en dev il faut commencer par faire un truc qui fonctionne ensuite vient l’optimisation.

Et moi je bosse sur un type de crawler particulier qui n’existe nulle part (gratis et opensource ou bash) : multi tag, multi url, multi plugin et « universel » (pour les sites qu’on peut crawler sans selenium), ORIENTE UTILISATEUR FINAL (celui qui veut pas se prendre trop la tête et qui veut un csv rapido).

Je ne bosse pas à « optimiser » a outrance mes scrap, je bosse sur un « truc » qui se paramètre et qui pourra crawler presque tout seul automatiquement (il suffira a terme de choisir un numero de crawler)

Aujourd’hui KOINKOIN_JOB que je réecris en C++ en est ma plus belle illustration , et est la deuxieme version de KOINKOIN_LBC entre autres…

A++

100 items ca ne me convient pas : ca peut dépanner quelqu’un sur le bord de la route … mais je préfére crawler pour etre sûr d’avoir … que me farcir (d’un point de vue json) leurs limitations au travers une API bridée

Ca doit être mon petit côté rebelle :slight_smile: :slight_smile:

Mais c’est 100 item par appel a l’API.
Ensuite tu met un offset de 100 pour avoir les 100 suivants…

Ce que toi tu fait avec 100 requête, tu peux l’avoir avec une seule requête sur l’api…
De ce que je vois tu as tout dans l’API !

Tu as attiré mon attention :slight_smile: ; tu veux pas me guider avec un petit screencast de ton écran par exemple , pour me faire gagner quelques heures ?

Mais ya rien de compliqué ouvre ta console chrome et regarde la requête, puis reproduis là !
J’ai déjà tout expliqué dans mes réponses précédentes il me semble.

C’est quoi qui te bloque ?

1 « J'aime »

Je dois pas être bien fini lol :slight_smile: Je t’expliquerai ultérieurement sur ce thread ce qui coince et ce que je comprends pas ; je mettrai 2 3 photos pour illuster mon problème et mes limites aussi.
A++

C’est noté :slight_smile:

Hello Elpablo,

Question intéressante en effet ! J’ai créé un petit script qui permet de collecter le prix moyen en fonction des 100 premiers items, et du keyword de ton choix, avec Request, et Python 3.

Je te laisse le lien vers l’article de blog : https://lobstr.io/index.php/2018/07/29/prix-moyen-leboncoin-fr-scraping-python-request/, tu trouveras le code, et un peu d’explication.

En bidouillant un peu, tu devrais pouvoir paramétrer les régions également… Curieux d’avoir tes retours sur l’article et sur le code !

@SashaLobstr
Très sympa le tuto très ludique. Bien fichu et tu vulgarises bien. Petite critique cependant j’aurai orienté le tuto vers une recherche moins floue comme « trottinette » ou « webcam » pour diminuer la pollution dans les annonces, remonter un tableau de valeurs plus cohérent et finir de convaincre le lecteur (sans notion de pollution dans les prix récoltés [l’utilisateur ne pourra pas faire de nettoyage dans ses prix récoltés])

Avec le CSV que l’utilisateur obtient in-fine avec mon script, il lui est très facile de supprimer la pollution dans les annonces et de faire une petite formule pour obtenir un prix moyen cohérent

Comme l’ a indiqué @ksahin , se brancher sur l’API est de loin l’option la plus simple/performante et ce n’est pas limité à LBC d’ailleurs.Dès que vous pouvez, essayez de cloner les requests des API non officielles.ça évite de se prendre la tête avec xpath/regex, les perfs sont bien plus élevées et on recup du JSON…Si vous ne voyez pas https://api.leboncoin.fr/finder/search avec la console vous pouvez utiliser https://www.telerik.com/fiddler par exemple ,je trouve la visu plus claire pour ma part .

2 « J'aime »

@koinkoin, merci beaucoup !
Effectivement, « iPhone » est pollué par pas mal de données annexes, et comme je l’indique en fin d’article, il faudrait réaliser un filtre avec un regex pour pouvoir filtrer les données en live.
J’aurais pu faire une extraction .csv, mais je trouve le jeu dans la console assez ludique :clown_face:

Traditionnellement, je fais pas mal de .csv, comme là par exemple : https://lobstr.io/index.php/2018/06/21/scraping-cryptomonnaie-coinmarketcap/

En tout cas bravo pour ton travail @SashaLobstr. Et moi j’ai plus qu’à bosser/comprendre tout ce que @karni et @ksahin ou encore @ScrapingExpert essaient de me faire comprendre (api).

MErci à vous tous.

Salut tout le monde,
Ou est ce que je peux me procurer le script koinkoin_LBC ? J’en aurai besoin pour un petit projet.
Merci d’avance.

Bonjour,

Le bon coin a changé tout son site y a 4/6 mois. KOINKOIN_LBC ne fonctionne donc plus.
Cependant dans quelques semaines le blog de KOINKOIN sera ouvert et vous pourrez de nouveau télécharger les scripts KOINKOIN que vous aurez besoin

https://www.dreamproject.fr/koinkoin/blog/

PS : j’ai laissé quelques vidéos n’hésites pas à revenir vers moi si tu as une idée ou une envie :slight_smile:

Cordialement,

Bonjour à tous,

Petit retour sur ce sujet. Parvenez-vous encore à accéder à l’API leboncoin ? Je reçois une 403 quand je tente de l’atteindre via Postman.

Cordialement,

A priori, pas de problème, le CURL fonctionne toujours très bien!

curl 'https://api.leboncoin.fr/finder/search' \
  -H 'authority: api.leboncoin.fr' \
  -H 'sec-ch-ua: "Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"' \
  -H 'api_key: ba0c2dad52b3ec' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36' \
  -H 'content-type: application/json' \
  -H 'accept: */*' \
  -H 'origin: https://www.leboncoin.fr' \
  -H 'sec-fetch-site: same-site' \
  -H 'sec-fetch-mode: cors' \
  -H 'sec-fetch-dest: empty' \
  -H 'referer: https://www.leboncoin.fr/recherche?locations=Marseille_13007__43.2815_5.35905_6221&page=2' \
  -H 'accept-language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7' \
  -H 'cookie: __Secure-InstanceId=274246e7-b8e7-42f8-a61a-48eae63e564c; ry_ry-l3b0nco_realytics=eyJpZCI6InJ5X0YxMTI0Qzc0LTI1MjYtNEM2Ny1BRjlELUI3Mzk3OTFGRkQxMSIsImNpZCI6bnVsbCwiZXhwIjoxNjU1OTk2MTc1MTQzLCJjcyI6bnVsbH0%3D; didomi_token=eyJ1c2VyX2lkIjoiMTdhMzk1ZjItNGU2NS02NmJkLTg5MTktYjc4ZmU3MDBhM2I5IiwiY3JlYXRlZCI6IjIwMjEtMDYtMjNUMTQ6NTY6MTYuMTUzWiIsInVwZGF0ZWQiOiIyMDIxLTA2LTIzVDE0OjU2OjE2LjE1M1oiLCJ2ZW5kb3JzIjp7ImVuYWJsZWQiOlsiYW1hem9uIiwic2FsZXNmb3JjZSIsImdvb2dsZSIsImM6bmV4dC1wZXJmb3JtYW5jZSIsImM6Y29sbGVjdGl2ZS1oaFNZdFJWbiIsImM6cm9ja3lvdSIsImM6cHVib2NlYW4tYjZCSk10c2UiLCJjOnJ0YXJnZXQtR2VmTVZ5aUMiLCJjOnNjaGlic3RlZC1NUVBYYXF5aCIsImM6Z3JlZW5ob3VzZS1RS2JHQmtzNCIsImM6cmVhbHplaXRnLWI2S0NreHlWIiwiYzp2aWRlby1tZWRpYS1ncm91cCIsImM6c3dpdGNoLWNvbmNlcHRzIiwiYzpsdWNpZGhvbGQteWZ0YldUZjciLCJjOmxlbW9tZWRpYS16YllocDJRYyIsImM6eW9ybWVkaWFzLXFuQldoUXlTIiwiYzpzYW5vbWEiLCJjOnJhZHZlcnRpcy1TSnBhMjVIOCIsImM6cXdlcnRpemUtemRuZ0UyaHgiLCJjOnZkb3BpYSIsImM6cmV2bGlmdGVyLWNScE1ucDV4IiwiYzpyZXNlYXJjaC1ub3ciLCJjOndoZW5ldmVybS04Vllod2IyUCIsImM6YWRtb3Rpb24iLCJjOndvb2JpIiwiYzpzaG9wc3R5bGUtZldKSzJMaVAiLCJjOnRoaXJkcHJlc2UtU3NLd21IVksiLCJjOmIyYm1lZGlhLXBRVEZneVdrIiwiYzpwdXJjaCIsImM6bGlmZXN0cmVldC1tZWRpYSIsImM6c3luYy1uNzRYUXByZyIsImM6aW50b3dvd2luLXFhenQ1dEdpIiwiYzpkaWRvbWkiLCJjOnJhZGl1bW9uZSIsImM6YWRvdG1vYiIsImM6YWItdGFzdHkiLCJjOmdyYXBlc2hvdCIsImM6YWRtb2IiLCJjOmFkYWdpbyIsImM6bGJjZnJhbmNlIl19LCJwdXJwb3NlcyI6eyJlbmFibGVkIjpbInBlcnNvbm5hbGlzYXRpb25jb250ZW51IiwicGVyc29ubmFsaXNhdGlvbm1hcmtldGluZyIsInByaXgiLCJtZXN1cmVhdWRpZW5jZSIsImV4cGVyaWVuY2V1dGlsaXNhdGV1ciJdfSwidmVuZG9yc19saSI6eyJlbmFibGVkIjpbImdvb2dsZSJdfSwidmVyc2lvbiI6MiwiYWMiOiJERTJBd0FFSUFmb0JoUUR4QUhtQVNTQWtzQ0pJSEVBT3JBaURCRktDS2dFbTRKdkFUa0F0ckJiZUM0d0Z5UUxsZ1lEQXdpQmlhQUFBLkRFMkF3QUVJQWZvQmhRRHhBSG1BU1NBa3NDSklIRUFPckFpREJGS0NLZ0VtNEp2QVRrQXRyQmJlQzR3RnlRTGxnWURBd2lCaWFBQUEifQ==; euconsent-v2=CPIQPOiPIQPOiAHABBENBfCgAP_AAHLAAAAAG7tf_X_fb2vj-_599_t0eY1f9_63v6wzjheNs-8NyZ_X_L4Xo2M6vB36pq4KmR4Eu3LBAQdlHOHcTQmQ4IkVqTPsbk2Mr7NKJ7LEmlMbe2dYGH9_n8XTuZKY70_8___z_3-v_v__7rbgCAAAAAAAIAgc6ASYal8AA2JY4Ek0aVQogQhWEhUAoAKKAYWiawgJHBTsrgI9QQIAEJqAjAiBBiCjFgEAAgEASERACAHggEQBEAgABACpAQgAIkAQWAFgYBAAKAaFABFAEIEhBEYFRymBARItFBPIGAAQAAAAAAAAAAAAAAAgBigYQABwAEgANAAeABSADAAMgAigBSAFQALAAYgA1gB8AH8AQgBDACYAFoALkAXgBfgDCAMQAZgA2gB4AD1AH8AggBCwCNAI4ASYAlQBMwCfAKAAUgAqABWgCygFuAXEAygDLgGaAZ0A0wDVAGwANoAcEA4gDkAHMAOyAd4B4QDzAPSAfIB9AD8AH_AQUBBoCEgIUARAAjABHICSgJMASuAloCXAE3gJ4AnwBQQCigFIAKWAVEAq8BXQFfALNAWgBaQC5wF2AXcAvIBfAC_AGBAMIAYqAzgDOgGgANOAa0A2gBvADhQHNAc4A6oB2QDtgHfAPEAesA9sB-gH7AP-AgQBA4CDAEJAIXAQ-AiUBFgCOIEdAR2Aj0BIICQwEigJRASpAl4CX4EwgTEAmaBNgE2gJ3AT-AoUBRACigFGQKOApABTMCmwKcAU-AqIBUkCrQKvAVmAraBYgFiwLHAsmBZYFmALOAWiAtWBa4FsALcAXBAuMC5IFzAXQAuuBdoF3QLzAvWBe4F9gMCAYVAw0DD4GKAYqAxqBjwGQAMiAZKAyuBmAGYgM0gZwBnMDPAM-gaCBoQDRQGnwNaA1uBroGvANgAbIA2oBtoDcAG5QN0A3WBvoG_QOEA4aBxIHFAOOAckA5SBzAHMgOeAdPA60DsAHcAO7Ad7A8IDwwHoQPTA9SB6wHsAPcAe8A-AB8QD5wH0gPsgfeB-ED8gP0AfwMBfgAHAASAA8ACkAGAAZABFACkAKgAWAAxABqAD-AIQAhgBMACmAFwAL0AYQBiADMAG2AP4BBQCNAI8ASYAlQBMwCfAKAAUgAqABWgCygFuAXAAx4BlAGWAM6AaYBqgDaAHBAOIA5ABzADsgHeAeEA8wD0gH0AfgA_4CEgIUARAAiQBGACOAElAJWAS0Am8BPAE-AKCAUUApABSwCogFXAK3AV0BXwCxAFmALnAXYBdwC8gF8AL8AYQAxUBnAGdANBAaYBpwDWgG0AN4AcKA5oDnAHVAOyAdsA74B4gD1gHtAPkAfsBAgCBwEJAIXAQ-AiUBFgCOIEdAR2Aj0BIICQwEigJOASiAlSBLwEvwJhAmIBM0CbAJtATiAncBP4ChQFEAKKAUZAo4CkAFMwKbApyBTwFPgKiAVJAq0CrwFZgK2AWJAscCyYFlgWYAs4BaIC1YFrgWxAtsC3AFwALjgXMBdAC64F2gXdAvIC9IF7gXwAvsBgQDCgGGgMPgYoBioDGgGPAMgAZEAyUBlYDMQGaQM4AzmBngGfQNBA0IBooDT4GtAa2A10BsADZIG1AbYA3CBugG6wN9A36BwgHDAOJAccA5IBykDmAOZAc8A6eB1oHYAO4Ad2A72B4QHhgPQgemB6kD1gPYAe4A94B8AD4gHzgPpAfZA-8D8IH5gfoA_ggDoAADAAcACQAFgANAAeABQAC0AGQAaAA6ACIAEgAKgAWAAuABiAD-AIIAhwBMAE0AKYAVQArgBcgC8AL8AYQBiADMAGgANoAbwA7gB6gD-AQIAi4BGgEeAJEASYAlYBPgFAAKQAVAAqgBWwCxALKAW4BcgC-AGEAMSAZQBlwDNAM6AaYBqgDYAG1AN8A4ABxADkgHMAc4A7IB3gHhAPMA9AB7QD5APwAf4BBYCEgIUARAAikBGAEZAI4ASUAlIBK4CbgJwATwAnwBQQChgFFgKQApIBSwCngFRAKuAVkArcBXQFfALEAWaAtAC0gFzgLsAu4BeQC-AF-AMAAYQAxQBmYDOAM6AaCA0wDTgGrANaAbQA3gBwgDmwHUAdUA64B2QDtgHfAPEAeiA9QD1gHtgPyA_gCAAECAIHAQnAhcCGAEPgIhgRKBEwCLIEcAR3Aj0CPoEggSKAk4BKICVAErgJagS8BL8CYQJiATMAmmBNgE2gJxATuAn-BQgFCgKIgUYBSECkgKTgUyBTkCngKfAVEAqSBVoFXgKzAVtAr4Cv4FiAWLAscCyYFlgWYAs4BaIC0wFqwLXAtwBbwC4IFxgXJAucC6IF1gXcAvIBekC9gL9gYCBgYDCoGGAYeAxKBigGKgMaAY8AyABkQDJQGTgMrAZaAzEBmkDNwM_gaCBoUDRANFAaPA0kDSwGngNTgaqBq0DWgNbAa7A18DYQGyQNrA2wBtwDcIG6AbrA3kDeoG-gb9A4ADgYHCAcMA4kBxgDjgHJQOYA5mBzwHPgOjgdKB08DqQOqgdYB2ADtQHcAO7gd6B3wDwYHhgeIA8eB5IHlQPOA9GB6YHqQPWA9iB7gHvQPgA-KB84H0gPsAfgA_QB-wD-A.f_gADlgAAAAA; _gcl_au=1.1.442193082.1624460184; sq=ca=12_s; _scid=a8de0dff-c1de-488e-bd8a-d75bddb4c1b3; include_in_experiment=true; ry_ry-l3b0nco_so_realytics=eyJpZCI6InJ5X0YxMTI0Qzc0LTI1MjYtNEM2Ny1BRjlELUI3Mzk3OTFGRkQxMSIsImNpZCI6bnVsbCwib3JpZ2luIjp0cnVlLCJyZWYiOm51bGwsImNvbnQiOm51bGwsIm5zIjpmYWxzZX0%3D; cto_bundle=eCPOTl9ZVnBFJTJCZGNmSlBqb0hSTmJHZTR1NXN5Zmh0RjRENEpBaERKOEFaZ2UxUWJHUTJPZnlEdlpyWUlQaDlGJTJCdzczNE9qSCUyRlVHbDdmWnUxSkVvek9hMlFjZkRva0plWnNFdDU1YkdibVBuM3ZuSnpNTEN1UEVldjFlRDROb0ElMkJZem1aakMySm0zT0F1ajkweHM0eUVtTnZqUlV2TGRoZ1ZWRXNkNkZQdTAzTnNBNHNYSDI0cTVWYzlzZ3NGWHMlMkJWeVFa; utag_main=v_id:017a395f228800207d9a738be08802079002907100942$_sn:38$_ss:0$_st:1627899774199$_pn:2%3Bexp-session$ses_id:1627897962185%3Bexp-session; datadome=8l1WbbTTAIxlnrN__5oIEObDUHYInjpYO_HQTFFd8.NxSPu6wF39jlJhQCT7eRFRSggm2fdczggI9wf6jSVKuWB3tqeuFyJBjspQrFwwkE' \
  --data-raw '{"owner_type":"all","limit":35,"limit_alu":3,"sort_by":"time","sort_order":"desc","filters":{"enums":{"ad_type":["offer"]},"location":{"locations":[{"locationType":"city","city":"Marseille","zipcode":"13007","label":"Marseille (13007)","region_id":"21","department_id":"13","area":{"lat":43.2815,"lng":5.35905,"default_radius":6221}}]}},"offset":35,"disable_total":true,"referrer_id":"682eefdc-f377-11eb-9f56-36dd0d4426bb","pivot":"{\"es_pivot\":\"1627890952000|2020731441\"}"}' \
  --compressed
1 « J'aime »