scrapy--使用items.py 文件处理数据
在前面的两节介绍了使用scrapy 爬取图片与保存到文件的方式,可以看到,我们所有的提取操作都是在主文件中进行的,虽然也能取出来数据,但是在对数据进行一些修改操作时,就比较麻烦了,而且代码臃肿,重复量高。
所以今天介绍如何在items.py 文件分离数据、操作数据。
这里以伯乐在线的全部文章为例,目的是提取每篇文章的标题、时间、点赞数、评论数、喜欢数,并且存到数据库中
1 我们先创建一个scrapy 项目,scrapy startproject bole ,
scrapy genspider job blog.jobbole.com ..
这里不一一介绍,
按照我们前两篇的方式,提取方式应该是像下面这样写:
但是这样写在对提取的数据进行下一步处理时就显得麻烦,所以今天这样写,
2 首先在items.py文件里引入一个ItemLoader类, ItemLoader 是分离数据的另一种方式,可以将数据的分离和提取分为两部分, 默认使用xpath,css数据提取方式,让代码更加整洁,更加清晰。 可以对一个数据使用多个处理函数,对代码的重用有很好的实现。
自己重写一个类,接受数据
3,提取数据:
首先在主文件里,创建ItemLoader的实例化对象,并且需要传入两个参数
参数1:item的实例化对象 item里面为还要提取的数据的字段
参数2:网页的源码
item_loader = ArticleItemLoader(item=JobboleItem(),response=response)
接着,add_xpath()用于给一个field设置, 后面需要追加两个参数, 一个是接收提取的数据的变量的名字,另一个是xpath/css路径,
这里的变量的名字,一会儿要跟items 文件里面的对应起来
4 在提取完数据之后,我们在Items.py 文件对其进行处理。
在图片里我们可以看到可以在类的外部写对数据处理的函数,只需要在scrapy.Field()里使用,
至此,关于如何在items.py 文件里处理数据已经介绍完毕,需要注意的地方是
也可以写:default_output_processor = ItemLoader.default_output_processor
但是这样输出的内容都在列表里。
在以上工作做完以后,我们还可以直接将数据保存到数据库里面,今天我们将其存入mysql数据库,
关于数据库,因为这里的操作和前面sqlite3 中大致相同,不过多说明
这里我们需要在pipelines.py 文件里进行以下书写,
这个的前提是已经在Mysql 中创建了相应的数据库跟表,
名字要对应起来。
最后在setting.py 文件把第67行前后的注释去掉,
最后,我们还可以保存图片,保存图片的方式在前篇介绍过了,就是在pipelines.py 文件里多写一个类,在settings.py 文件,引用写的那个类…
和前面的是一样的,不在详细介绍了