这篇文章接上篇scrapy爬取cnblogs博客文章(保存json)
大部分和上篇文章没有区别,我直接说不同的地方,那就是处理数据的地方。
1.在item中新建一个字段
linkmd5id=scrapy.Field()
它的作用是用每篇文章的url作为唯一值,如果这个url在mysql数据库中没有存储,就将这条数据全部存进数据库,如果这个url已经存过了,就将这条信息update进数据库,没准这条信息中的题目或者摘要改变了呢。
2.更改pipelines.py
因为我们的数据要存入到数据库中了,所以数据的处理就不能和json一样了,代码如下:
|
|
- 上面的代码首先从setting文件中读取出数据库的配置信息(在下面添加)
- _get_linkmd5id是获取文章url的md5值
- 在插入数据库之前会先查询一次上面的md5值是否已经存在数据库中,如果不存在,那么这就是一条新的数据,直接插入即可;如果已经存在,那么就将这条信息更新一下。
3.修改settings.py
将ITEM_PIPELINES中改为'cnblogs.pipelines.MySQLStoreCnblogsPipeline': 300,
再添加数据库的配置信息如下:
|
|
当然上面的信息都是根据自己机器的配置填写。这里面用的数据库是cnblogsdb,所以需要先新建一个数据库和其中的表:sql语句如下:
|
|
此文件会在工程目录中给出。
以上就是对于之前保存成json工程的所有更改:
4.运行
scrapy crawl cnblogs
数据库中的运行结果如下:
此工程的github地址为:https://github.com/lowkeynic4/crawl/tree/master/cnblogs%28mysql%29