最近在学习scrapy爬虫框架,感受到了它的强大之处,在接触各种数据存储方法后,希望进行一个简单的总结。总的来说,爬虫常用的数据存储方法,无非就是保存在本地的json格式化文件或者是数据库中,但在学习的过程中,了解了每种场景中不一样的用法,分别是:自定义json文件、json export方法、同步存储数据库、异步存储数据库四种方法。下面就结合代码简要进行一个介绍。
说到数据的存储,了解scrapy的人都知道,这些操作是在项目子目录下的piplines.py配置 :
爬虫本身具体的配置是在scrapy的spiders目录下进行,同时按照相应字段对items.py设置,这里对爬虫本身的代码不多介绍,仅仅以一个文章爬取网站为例,对piplines.py这个数据存储设置文件进行总结。
一、自定义的json文件存储
当数据量没有那么大的时候,或者,只是临时性质的爬虫操作,为了快速获取数据,将数据存储到json的格式化文件中是比较好的选择,第一种方式是使用自定义的文件操作进行设置:
我们这里使用的是codecs模块做文件操作。
import codecs # 文件打开和存储
import json
class JsonWithEncodingPipeline(object):
# 自定义json文件的导出
def __init__(self):
self.file = codecs.open('article.json', 'w', encoding="utf-8")
def process_item(self, item, spider):
lines = json.dumps(dict(item), ensure_ascii=False) + "\n"
self.file.write(lines)
return item
def spider_closed(self, spider):
self.file.close()
JsonWithEncodingPipeline这个类对文件的操作流程还是“打开”,“处理”,“关闭”,我们将item传进来的数据,进行dict转换,通过json.dumps转化为json格式,值得注意的是,在使用json.dumps时,要规定ensure_as