scrapy将爬取的中文内容保存到json文件中

1. 修改settings.py,启用item pipelines组件

# Configure item pipelines # See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html # ITEM_PIPELINES = { #'tutorial.pipelines.TutorialPipeline': 300, # }

改为
# Configure item pipelines # See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html ITEM_PIPELINES = { 'tutorial.pipelines.TutorialPipeline': 300, }

当然,我们不能只改而不去研究其中的意义.
根据官方注释我们顺利找到了官方文档对此的解释说明:
为了启用一个Item Pipeline组件,你必须将它的类添加到 ITEM_PIPELINES 配置,就像下面这个例子:
ITEM_PIPELINES = { 'myproject.pipelines.PricePipeline': 300, 'myproject.pipelines.JsonWriterPipeline': 800, >}

分配给每个类的整型值,确定了他们运行的顺序,item按数字从低到高的顺序,通过pipeline,通常将这些数字定义在0-1000范围内。
那么什么是Item Pipeline组件呢?
当Item在Spider中被收集之后,它将会被传递到Item Pipeline,一些组件会按照一定的顺序执行对Item的处理。
每个item pipeline组件(有时称之为“Item Pipeline”)是实现了简单方法的Python类。他们接收到Item并通过它执行一些行为,同时也决定此Item是否继续通过pipeline,或是被丢弃而不再进行处理。
以下是item pipeline的一些典型应用:
  • 清理HTML数据
  • 验证爬取的数据(检查item包含某些字段)
  • 查重(并丢弃)
  • 将爬取结果保存到数据库中
如果你想了解更多item pipeline组件相关的知识,请自行阅读官方文档
2.设置item pipelines组件
将你的 *pipelines.py 代码添加以下代码
def *_item(self, item, spider):with open('data_cn1.json', 'a') as f: json.dump(dict(item), f, ensure_ascii=False) f.write(',\n') return item

其中重点关注一下json.dump函数
根据查看json的源码中的注释发现:
If ensure_ascii is false, then the strings written to fp can
contain non-ASCII characters if they appear in strings contained in
obj. Otherwise, all such characters are escaped in JSON strings.
如果ensure_ascii为false,那么写入fp的字符串可以包含非ASCII字符。否则,所有这些字符都会在JSON字符串中转义。
也就是说json.dump函数将获取到item转化成字符串中存入json文件,并且 将参数ensure_ascii设为False使得中文(UTF-8编码)不经过转义,也就不会乱码
【scrapy将爬取的中文内容保存到json文件中】参考:
  • scrapy中输出中文保存中文
  • Item Pipeline

    推荐阅读