在咱们的初级教程中,咱们介绍了如何应用Scrapy创立和运行一个简略的爬虫。在这篇文章中,咱们将深刻理解Scrapy的弱小性能,学习如何应用Scrapy提取和解决数据。

一、数据提取:Selectors和Item

在Scrapy中,提取数据次要通过Selectors来实现。Selectors基于XPath或CSS表达式的查询语言来选取HTML文档中的元素。你能够在你的爬虫中应用response对象的xpathcss办法来创立一个Selector对象。

例如,咱们能够批改咱们的QuotesSpider爬虫,应用Selectors来提取每个援用的文本和作者:

import scrapyclass QuotesSpider(scrapy.Spider):    name = "quotes"    start_urls = [        'http://quotes.toscrape.com/page/1/',    ]    def parse(self, response):        for quote in response.css('div.quote'):            text = quote.css('span.text::text').get()            author = quote.css('span small::text').get()            print(f'Text: {text}, Author: {author}')

此外,Scrapy还提供了Item类,能够定义你想要收集的数据结构。Item类非常适合收集结构化数据,如咱们从quotes.toscrape.com中获取的援用:

import scrapyclass QuoteItem(scrapy.Item):    text = scrapy.Field()    author = scrapy.Field()

而后咱们能够批改QuotesSpider爬虫,使其生成和收集QuoteItem对象:

class QuotesSpider(scrapy.Spider):    name = "quotes"    start_urls = [        'http://quotes.toscrape.com/page/1/',    ]    def parse(self, response):        for quote in response.css('div.quote'):            item = QuoteItem()            item['text'] = quote.css('span.text::text').get()            item['author'] = quote.css('span small::text').get()            yield item

二、数据处理:Pipelines

Scrapy应用数据管道(pipelines)来解决爬虫从网页中抓取的Item。当爬虫生成一个Item,它将被发送到Item Pipeline进行解决。

Item Pipeline是一些依照执行顺序排列的类,每个类都是一个数据处理单元。每个Item Pipeline组件都是一个Python类,必须实现一个process_item办法。这个办法必须返回一个Item对象,或者抛出DropItem异样,被抛弃的item将不会被之后的pipeline组件所解决。

例如,咱们能够增加一个Pipeline,将收集的援用保留到JSON文件中:

import jsonclass JsonWriterPipeline(object):    def open_spider(self, spider):        self.file = open('quotes.jl', 'w')    def close_spider(self, spider):        self.file.close()    def process_item(self, item, spider):        line = json.dumps(dict(item)) + "\n"        self.file.write(line)        return item

而后你须要在我的项目的设置文件(settings.py)中启用你的Pipeline:

ITEM_PIPELINES = {   'tutorial.pipelines.JsonWriterPipeline': 1,}

在这篇文章中,咱们更深刻地探讨了Scrapy的性能,包含如何应用Selectors和Item提取数据,如何应用Pipelines解决数据。在下一篇文章中,咱们将学习如何应用Scrapy解决更简单的状况,如登录、cookies、以及如何防止爬虫被网站辨认和封闭等问题。