Maison > développement back-end > Tutoriel Python > Comment gratter des pages de produits (Etsy, Amazon, Ebay) en Python à l'aide de Scrapy et des rappels de demande

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
758 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!

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