Scraping Cdiscount avec scrapy

Bonjour à tous,

J’essaye depuis quelques jours de scrapper un résultat de recherche sur cdiscount mais je n’y arrive pas.
J’utilise Scrapy et Splash car cdiscount nécéssite du javascript pour fonctionner.

(J’ai bien essayé de me passer de splash en cherchant les requetes xhr qui chargent les données au niveau de la console dev + network, mais on dirait que les réponses du serveur sont crypté et surement décrypté par du JS coté client. Je n’arrive pas à le reverse engineering ).

J’arrive donc à scraper la premières page mais je n’arrive pas a simuler un clic sur le bouton pour passer à la page suivante.
Scrapy me dit que je tente de scrapper du contenu dupliqué et au final je me retrouve avec un json contenant le meme résultat deux fois.

J’utilise le script suivant pour simuler le clic sur le bouton:

script = «  »« function main(splash)
assert(splash:go(splash.args.url))
splash:wait(1)
button = splash:select(’.jsNxtPage’)
splash:set_viewport_full()
splash:wait(1)
button:mouse_click()
splash:wait(1)
return {url = splash:url(),
html = splash:html()}
end »""

Et la page que je souhaite scraper est : https://www.cdiscount.com/search/10/rouge+a+levre.html#his
Plus les prochaines pages.

J’apprécierai beaucoup un coup de main :slight_smile:

Salut,

Tu dois changer la config de scrapy qui permet de détecter les pages doublons
De base ça ne prend pas en compte les params URL (après le ? donc)

A part ça, tu peux scrap Cdiscount avec des requêtes POST sous la forme
https://www.cdiscount.com/ProductListUC.mvc/UpdateJsonPage?page=

Cdiscount ne nécessite pas de JS jusqu’à la pagination 9, pour celles d’après, il faut le faire en requête POST, ou en headless

1 « J'aime »

Okay merci beaucoup pour ces pistes !!
Je vais tester ça et je t’en dirais des nouvelles ^^

Rebonjour !

J’ai pu essayé la piste avec requête POST, ça fonctionne parfaitement et je peux récupérer quasiment tout ce que je souhaite obtenir excepté les bandeaux que l’on peut trouver au dessus d’un produit.
(Exemple : https://prnt.sc/vok6ce)

En explorant un peu plus j’ai pu apercevoir ceci dans le code source : https://prnt.sc/vojz38
On peut y voir un script contenant TOUTES les informations que je souhaite exploiter.
As-tu une idée de comment les récupérer sans avoir besoin de passer en headless?

Je n’ai cependant pas compris ce que tu voulais dire au niveau de la pagination, peu importe la page sur laquelle je me situe si je n’active pas le js, je ne reçois pas de résultats.

Okay my bad j’ai trouvé et c’est biendisponible depuis l’url que tu m’as passé, désolé et merci encore :smiley:

Bonjour,

comment obtenez-vous l’url pour la requête POST depuis un url standard ?

Merci d’avance

1 « J'aime »

Bonjour,
peux-tu partager ton code utiliser pour la methode POST s’il te plait :innocent:

1 « J'aime »

C’était une galère, mais voilà le code complet version juillet 2023

Barbecue d’été à l’honneur

:full_moon_with_face:

Entre temps j’ai développé une façons d’être le fair de mon côté je jetterais un coup d’œil à la vôtre :wink:
En tout cas un grand merci pour votre réponse :pray:

1 « J'aime »