(Je ne tolère rien d'illégal, ceci est uniquement à des fins éducatives)
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}
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()
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)
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}
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)
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!