爬虫课程(九)|豆瓣:Scrapy中items设计及如何把item传给Item Pipeline

一、定义Item

Item是保存爬取到的数据的容器,其使用方法和python字典类似,并且提供了额外保护机制来避免拼写错误导致的未定义字段错误。

类似在ORM中做的一样,我们可以通过创建一个scrapy.Item 类,并且定义类型为scrapy.Field 的类属性来定义一个Item。

首先根据需要从book.douban.com/latest?icn=index-latestbook-all获取到的数据对item进行建模。我们需要从book.douban.com中获取书籍的背景图、书籍详情页地址、书籍名称、书籍介绍、书籍页数、书籍价格以及书籍的发布时间。 对此,在item中定义相应的字段。编辑 tutorial 目录中的 items.py 文件:

豆瓣读书信息的Item

二、把豆瓣读书的信息写进Item中

第一步,我们把豆瓣读书在列表页的信息写入Item,如下图代码:

把列表页面的书籍信息写入Item

我们发现,列表页的数据非常不全,例如我们需要的书籍页数和书籍价格信息就不在列表页,那么我们就必须去书籍详细页去获取这两个数据。如下图代码:

去详细页获取更多信息

在这两个def中,我们需要注意:在第一个def(parse)在yield出来之后有3个参数,第一个是url,这个url即需要进入的详细页的地址,第二个参数meta是需要把值传到下一个def的对象,第三个参数是callback的值,也就是第二个def(parse_detail)的名称。

最后执行,我们查看得出的结果:

执行爬虫打印出的结果

三、把Item的值传到Item Pipeline

当Item在Spider中被收集之后,它将会被传递到Item Pipeline,一些组件会按照一定的顺序执行对Item的处理。 每个item pipeline组件(有时称之为“Item Pipeline”)是实现了简单方法的Python类。他们接收到Item并通过它执行一些行为,同时也决定此Item是否继续通过pipeline,或是被丢弃而不再进行处理。 以下是item pipeline的一些典型应用: 1)清理HTML数据 2)验证爬取的数据(检查item包含某些字段) 3)查重(并丢弃) 4)将爬取结果保存到数据库中

我们获取网站的数据,并且把这些数据保存到Item容器,最后需要通过pipelines把数据存放到数据库中去。那么Item的数据应该怎么传到pipelines里面呢?

第一步:把这个Item yield出去,yield出去之后,这个Item就会进入到pipelines里面去。

yield出Item

第二步:在pipelines编写一个接收Item的class,编写一个process_item(名字是固定的)的方法(带有item参数),同时在settings.py把这个class配置上。如下两张图:

编写一个带process_item def的class

把这个class名称在settings.py中的ITEM_PIPELINES配置上

最后,我们在pipelines的process_item方法上写个断点,查看接收到的item的值,在main.py进行debug,进入到process_item方法时,结果如下,说明这个item值已经进入pipelines管道啦。

item进入pipelines管道

那么,接下来要做的就是利用pipelines,把数据保存到mysql中。这个下篇文章在讲。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Jack-Cui

Python3网络爬虫(五):Python3安装Scrapy

运行平台:Windows Python版本:Python3.x IDE:Sublime text3 一、Scrapy简介     Scrapy是一个为...

32500
来自专栏崔庆才的专栏

Scrapy框架的使用之Scrapy框架介绍

22740
来自专栏腾讯云中间件团队的专栏

Raft 算法原理及其在 CMQ 中的应用(上)

Raft 算法是一种分布式一致性算法。与 paxos 相比,它更易理解和工程化。我们完整实现了该算法并将其应用在自研的高可靠消息中间件 CMQ 中,同时沉淀出对...

2.2K00
来自专栏OCR PHP 求助

PHP OCR 营业执照 识别

30970
来自专栏Java与Android技术栈

基于Vert.x和RxJava 2构建通用的爬虫框架

最近由于业务需要监控一些数据,虽然市面上有很多优秀的爬虫框架,但是我仍然打算从头开始实现一套完整的爬虫框架。

14930
来自专栏北京马哥教育

Python分布式爬虫详解(一)

当项目上升到一定境界时候,需要同时抓取几百个甚至上千个网站,这个时候,单个的爬虫已经满足不了需求。比如我们日常用的百度,它每天都会爬取大量的网站,一台服务器肯定...

18630
来自专栏小怪聊职场

爬虫课堂(十六)|Scrapy框架结构及工作原理

30150
来自专栏向治洪

android之service

android中服务是运行在后台的东西,级别与activity差不多。既然说service是运行在后台的服务,那么它就是不可见的,没有界面的东西。你可以启动一个...

200100
来自专栏张戈的专栏

HTTP加速器varnish安装小记(1)

上午共享的那个varnish 安装手册,个人看了下,有点不知所云,好吧~看来还是先安装玩玩! 苦逼公司服务器没法连外网,不能用什么 wget 或 yum 命令直...

46480
来自专栏SeanCheney的专栏

Scrapy1.4最新官方文档总结 1 介绍·安装安装

《Learning Scrapy》这本书是2016年1月出版的,作者使用的版本是Scrapy 1.0.3。 现在,Scrapy的最新版本是1.4。 ? Scra...

28880

扫码关注云+社区

领取腾讯云代金券