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 : Captcha
Plus les prochaines pages.
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 : Screenshot by Lightshot)
En explorant un peu plus j’ai pu apercevoir ceci dans le code source : Screenshot by Lightshot
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.