Python Language Gratter en utilisant le cadre Scrapy


Exemple

Vous devez d'abord créer un nouveau projet Scrapy. Entrez un répertoire dans lequel vous souhaitez stocker votre code et exécutez:

scrapy startproject projectName

Pour gratter, nous avons besoin d'une araignée. Les araignées définissent la manière dont un site donné sera raclé. Voici le code d'une araignée qui suit les liens vers les questions les plus votées sur StackOverflow et raconte certaines données de chaque page ( source ):

import scrapy

class StackOverflowSpider(scrapy.Spider):
    name = 'stackoverflow'  # each spider has a unique name
    start_urls = ['http://stackoverflow.com/questions?sort=votes']  # the parsing starts from a specific set of urls

    def parse(self, response):  # for each request this generator yields, its response is sent to parse_question
        for href in response.css('.question-summary h3 a::attr(href)'):  # do some scraping stuff using css selectors to find question urls 
            full_url = response.urljoin(href.extract())
            yield scrapy.Request(full_url, callback=self.parse_question)

    def parse_question(self, response): 
        yield {
            'title': response.css('h1 a::text').extract_first(),
            'votes': response.css('.question .vote-count-post::text').extract_first(),
            'body': response.css('.question .post-text').extract_first(),
            'tags': response.css('.question .post-tag::text').extract(),
            'link': response.url,
        }

Enregistrez vos classes d'araignées dans le répertoire projectName\spiders . Dans ce cas - nom du projectName\spiders\stackoverflow_spider.py .

Vous pouvez maintenant utiliser votre araignée. Par exemple, essayez de courir (dans le répertoire du projet):

scrapy crawl stackoverflow