使用Scrapy抓取中文时,输出一般是unicode,要输出中文也只需要稍作改动。
两种情况:
单纯交互输出
如代码:
title = sel.xpath('a/text()').extract()
print title
此时输出的是title对应中文的unicode格式,只需要指定“utf-8”编码即可输出中文,如下:
title = sel.xpath('a/text()').extract()
for t in title:
print t.encode('utf-8')
这里需要注意的是“encode()”函数是字符串专有的,而title是一个列表,因此需要对title中的每一个执行该操作。
存储
存储中文数据可以利用pipeline实现
1.定义pipeline
# -*- coding: utf-8 -*-
import codecs
import json
class TutorialPipeline(object):
def __init__(self):
self.file = codecs.open('data_cn.json', 'wb', encoding='utf-8')
def process_item(self, item, spider):
line = json.dumps(dict(item)) + '\n'
self.file.write(line.decode("unicode_escape"))
return item
上述方法将得到的item解码,以便正常显示中文,并保存到定义的json文件中。
2.注册自定义的pipeline
为了启动pipeline,必须将其加入到“ITEM_PIPLINES”的配置中,在settings.py中加入下面一句:
ITEM_PIPELINES = {
'tutorial.pipelines.TutorialPipeline':300
}
其中根目录是tutorial,pipelines是我的pipeline文件名,TutorialPipeline是类名
OK,搞定
本文介绍了如何在Scrapy中处理中文数据,包括如何进行中文交互输出和存储。通过在输出时指定'utf-8'编码,可以将抓取的unicode中文转为可见的中文字符。同时,利用Scrapy的pipeline,可以解码并保存到JSON文件中,确保中文数据的正确存储。
2万+

被折叠的 条评论
为什么被折叠?



