web-dev-qa-db-fra.com

Comment contourner la protection cloudflare bot / ddos ​​dans Scrapy?

J'avais l'habitude de gratter la page Web de commerce électronique à l'occasion pour obtenir des informations sur les prix des produits. Je n'ai pas utilisé le grattoir construit en utilisant Scrapy depuis un moment et hier j'essayais de l'utiliser - j'ai rencontré un problème avec la protection des bots.

Il utilise la protection DDOS de CloudFlare qui utilise essentiellement l'évaluation JavaScript pour filtrer les navigateurs (et donc les grattoirs) avec JS désactivé. Une fois la fonction évaluée, la réponse avec le nombre calculé est générée. En retour, le service renvoie deux cookies d'authentification qui attachés à chaque demande permettent d'explorer normalement le site. Ici est la description de son fonctionnement.

J'ai également trouvé un cloudflare-scrape Python qui utilise un moteur d'évaluation JS externe pour calculer le nombre et renvoyer la demande au serveur. Je ne sais pas comment pour l'intégrer dans Scrapy cependant. Ou peut-être y a-t-il un moyen plus intelligent sans utiliser l'exécution JS? Au final, c'est un formulaire ...

J'apprécierais toute aide.

14
Kulbi

J'ai donc exécuté JavaScript en utilisant Python avec l'aide de cloudflare-scrape .

À votre grattoir, vous devez ajouter le code suivant:

def start_requests(self):
  for url in self.start_urls:
    token, agent = cfscrape.get_tokens(url, 'Your prefarable user agent, _optional_')
    yield Request(url=url, cookies=token, headers={'User-Agent': agent})

à côté des fonctions d'analyse. Et c'est tout!

Bien sûr, vous devez d'abord installer cloudflare-scrape et l'importer sur votre araignée. Vous avez également besoin d'un moteur d'exécution JS installé. J'avais déjà Node.JS, rien à redire.

13
Kulbi

De toute évidence, la meilleure façon de procéder serait de mettre votre IP en liste blanche dans CloudFlare; si cela ne convient pas, je recommande la bibliothèque cloudflare-scrape . Vous pouvez l'utiliser pour obtenir le jeton de cookie, puis fournir ce jeton de cookie dans votre demande Scrapy retour au serveur.

3
mjsa