scrapy將爬取的中文內(nèi)容保存到j(luò)son文件中

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,
}

當(dāng)然,我們不能只改而不去研究其中的意義.

根據(jù)官方注釋我們順利找到了官方文檔對此的解釋說明:

為了啟用一個Item Pipeline組件,你必須將它的類添加到 ITEM_PIPELINES 配置,就像下面這個例子:

ITEM_PIPELINES = { 
'myproject.pipelines.PricePipeline': 300, 
'myproject.pipelines.JsonWriterPipeline': 800, >}

分配給每個類的整型值,確定了他們運(yùn)行的順序,item按數(shù)字從低到高的順序,通過pipeline,通常將這些數(shù)字定義在0-1000范圍內(nèi)。

那么什么是Item Pipeline組件呢?

當(dāng)Item在Spider中被收集之后,它將會被傳遞到Item Pipeline,一些組件會按照一定的順序執(zhí)行對Item的處理。
每個item pipeline組件(有時稱之為“Item Pipeline”)是實(shí)現(xiàn)了簡單方法的Python類。他們接收到Item并通過它執(zhí)行一些行為,同時也決定此Item是否繼續(xù)通過pipeline,或是被丟棄而不再進(jìn)行處理。
以下是item pipeline的一些典型應(yīng)用:

  • 清理HTML數(shù)據(jù)
  • 驗(yàn)證爬取的數(shù)據(jù)(檢查item包含某些字段)
  • 查重(并丟棄)
  • 將爬取結(jié)果保存到數(shù)據(jù)庫中

如果你想了解更多item pipeline組件相關(guān)的知識,請自行閱讀官方文檔

2.設(shè)置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

其中重點(diǎn)關(guān)注一下json.dump函數(shù)
根據(jù)查看json的源碼中的注釋發(fā)現(xiàn):

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字符串中轉(zhuǎn)義。

也就是說json.dump函數(shù)將獲取到item轉(zhuǎn)化成字符串中存入json文件,并且 將參數(shù)ensure_ascii設(shè)為False使得中文(UTF-8編碼)不經(jīng)過轉(zhuǎn)義,也就不會亂碼


參考:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容