如何给网站配色,一个虚拟主机能安装2个网站吗,临沂seo网站推广,个人怎么开发app在我们的初级教程中#xff0c;我们介绍了如何使用Scrapy创建和运行一个简单的爬虫。在这篇文章中#xff0c;我们将深入了解Scrapy的强大功能#xff0c;学习如何使用Scrapy提取和处理数据。
一、数据提取#xff1a;Selectors和Item
在Scrapy中#xff0c;提取数据主要…在我们的初级教程中我们介绍了如何使用Scrapy创建和运行一个简单的爬虫。在这篇文章中我们将深入了解Scrapy的强大功能学习如何使用Scrapy提取和处理数据。
一、数据提取Selectors和Item
在Scrapy中提取数据主要通过Selectors来完成。Selectors基于XPath或CSS表达式的查询语言来选取HTML文档中的元素。你可以在你的爬虫中使用response对象的xpath或css方法来创建一个Selector对象。
例如我们可以修改我们的QuotesSpider爬虫使用Selectors来提取每个引用的文本和作者
import scrapyclass QuotesSpider(scrapy.Spider):name quotesstart_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(fText: {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 quotesstart_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)) \nself.file.write(line)return item然后你需要在项目的设置文件settings.py中启用你的Pipeline
ITEM_PIPELINES {tutorial.pipelines.JsonWriterPipeline: 1,
}在这篇文章中我们更深入地探讨了Scrapy的功能包括如何使用Selectors和Item提取数据如何使用Pipelines处理数据。在下一篇文章中我们将学习如何使用Scrapy处理更复杂的情况如登录、cookies、以及如何避免爬虫被网站识别和封锁等问题。