Comment gratter des pages de produits (Etsy, Amazon, Ebay) en Python à l'aide de Scrapy et des rappels de demande

Patricia Arquette
Libérer: 2024-11-06 10:58:02
original
634 Les gens l'ont consulté

How to Scrape Product Pages(Etsy, Amazon, Ebay) in Python Using Scrapy and Request Callbacks

(Je ne tolère rien d'illégal, ceci est uniquement à des fins éducatives)

Introduction

Scrapy est l'un des meilleurs frameworks de scraping Web en Python, il est facile à utiliser, rapide et doté de nombreuses fonctionnalités.

Mais et si nous voulions gratter plusieurs pages de manière récursive ? Tels que les pages produits.

Eh bien, le moyen le plus simple consiste à ajouter un simple rappel à une fonction Request.

Voici un extrait de code dans un projet Scrapy explorant un site Web avec des produits répertoriés tels qu'Amazon, eBay et Etsy :

def parse(self, response):
    links = response.css('a.s-item__link::attr(href)').getall()

    for link in links:
        yield Request(url=link, callback=self.parse_item)

    next_page = response.css('a.pagination___next.icon-link::attr(href)').get()
    if next_page:
        print('Next page: %s' % next_page)
        yield Request(url=next_page, callback=self.parse)

def parse_item(self, response):
    title = response.xpath('//h1[@class="x-item-title___mainTitle"]/span/text()').get()
    price = response.xpath('//span[@id="prcIsum"]/text()').get()

    yield {'title':title,
           'price':price}
Copier après la connexion

Comment ça marche ?

Tout d'abord, il récupère les liens de chaque article répertorié sur une page de produits en utilisant cette ligne de code :

links = response.css('a.s-item__link::attr(href)').getall()
Copier après la connexion

Il parcourt ensuite chacun de ces liens, envoie une requête pour obtenir la source de la page et effectue un rappel vers parse_item :

for link in links:
     yield Request(url=link,callback=self.parse_item)
Copier après la connexion

Dans la fonction parse_item, elle récupère le titre et le prix de l'article :

def parse_item(self, response):
      title = response.xpath('//h1[@class="x-item-title__mainTitle"]/span/text()').get()
      price = response.xpath('//span[@id="prcIsum"]/text()').get()

      yield {'title':title,
             'price':price}
Copier après la connexion

Notre code récupère ensuite le lien vers la page suivante, le demande avec un rappel vers lui-même (c'est-à-dire la fonction d'analyse) et recommence :

next_page = response.css('a.pagination__next.icon-link::attr(href)').get()
  if next_page:
        print('Next page:%s' % next_page)
        yield Request(url=next_page,callback=self.parse)
Copier après la connexion

Conclusion

Et voilà, c'est aussi simple que ça !

Scraper des pages de produits de manière récursive avec Scrapy peut être implémenté aussi facilement que l'ajout d'un rappel à une fonction Request.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal