當前位置:
首頁 > 最新 > 爬蟲知識8:數據存儲的需求實現,Item、Pipeline介紹

爬蟲知識8:數據存儲的需求實現,Item、Pipeline介紹

scrapy提取的信息可以保存在文件(csv、txt、json)中,或者資料庫中。而scrapy中的Pipeline則是專門用來保存數據的模塊。

以下以爬取豆瓣TOP250電影為例,分別介紹4種不同的數據保存和展示方式。且在案例3和案例4分別介紹了item和pipelines的知識

案例1:不保存到文件,只在屏幕列印出來。直接用print語句即可。

案例2:保存到文件,但不使用items返回數據,初級保存

案例3:保存到文件,使用items返回數據。但無法對保存的數據進行修改。

案例4:保存到文件,同時使用item和pipeline,可以實現對數據處理後再保存。

案例1、不保存到文件,只在屏幕列印出來。直接用print語句即可。

則如下爬蟲程序可滿足:

運行runspider.py文件,即可得到所有的電影名稱和網址。

案例2:保存到文件,不使用items返回數據,也不對文件做任何處理。也即僅在spider中實現初級保存。

以下爬蟲程序即可滿足:新增語句在畫對勾的地方。主要是打開和寫入文件語句。

案例3:保存到文件,使用items返回數據。但無法對保存的數據進行修改。

運行方式:返回數據後直接在命令行寫保存的文件

3-1關於items介紹

爬蟲的目的是為了從非結構性的數據源提供結構性數據,蜘蛛中的parse,解析出來url、title、time、content等數據,但是如何將這些數據包裝成結構化的數據呢?scrapy提供了item類來滿足這樣的需求。Item對象是一種簡單的容器,榮來保存爬取到的數據,提供了類似於字典的API以及用於聲明可用欄位的簡單語法。

關於item的一些知識:

item:保存提取的數據,類似於字典的形式。

item的結構定義:使用簡單的class定義語法以及Field對象來生命。

Field可以指向任意類型的欄位;

Item賦值:item["title"]="xxxx",其中的title可以為任意的名字

Spider中使用yield 處理item對象:需要再parse中導入

支持的存儲格式為csv、json、xml

如果在命令行直接輸入,語句分別為:

Json格式:scrapy crawl 爬蟲名稱 -t json -o 文件名稱.json,如果需要轉碼則可寫成:scrapy crawl 爬蟲名稱 -t json -o 文件名稱.json-s FEED_EXPORT_ENCODING="utf-8"

csv格式:scrapy crawl 爬蟲名稱 -t csv -o 文件名稱.csv

TXT格式:scrapy crawl 爬蟲名稱 -t txt -o 文件名稱.txt

存儲的問題:

FEED_URL:存儲路徑

FEED_FORMAT:存儲格式

FEED_EXPORT_ENCODING:存儲編碼

FEED_EXPORT_FIELDS:存儲欄位

3-2 程序的實現

這個程序需要對3個py文件做修改:爬蟲程序.py、items.py、運行爬蟲的程序.py

1)自己寫的爬蟲程序spider_ex1.py如下:

2) items.py的程序如下:

3)運行爬蟲的程序,新建一個runspider.py文件,程序如下。使用這個程序就可以直接在pycharm中運行程序了,不需要切換到命令欄再運行爬蟲了。

如果要保存其他格式,則參考語法改成txt、或者json對應的語句。

如果是json,需要轉碼,可使用以下語句

運行runspider.py文件,即可得到想要結果。

案例4::保存到文件,同時使用item和pipeline,可以實現數據處理後再保存。

4-1 關於pipeline介紹

當Item在Spider中被收集之後,它將會被傳遞到Item Pipeline,這些Item Pipeline組件按定義的順序處理Item。主要任務是清洗、驗證和存儲數據。每個Item Pipeline都是實現了簡單方法的Python類,因此我們也可以編寫自己的Item Pipeline。以下是item pipeline的一些典型應用:

清理HTML數據

驗證解析到的數據(檢查Item是否包含必要的欄位)

檢查是否是重複數據(如果重複就刪除)

將解析到的數據存儲到資料庫或文件


丟棄item的方法:

如果不丟棄,則使用語句「return item」,如果需要丟棄,則先導入模塊「from scrapy.exceptions import DropItem」,再使用語句「raise DropItem()」

如果想將pipeline單獨應用於一個蜘蛛,可通過此語句

if spider.name=="test"

Pipeline設置:

在settings.py文件中,找到字典「ITEM_PIPELINES」,激活如下:

可以添加多個PIPELINES,誰的序號小先執行誰。

4-2爬蟲的程序實現

這個程序執行對應的5個py文件:爬蟲程序.py、items.py、settings.py、pipelines.py、運行爬蟲的程序.py

1)爬蟲程序.py,和案例3相同,只需要有item即可

2)items.py的程序如下,和案例3一樣,需要用items都要這樣設置

3)pipelines.py程序,因為要實現同時保存到text文件和json文件中,要寫兩個pipeline文件。當然也可以寫更多的。

第一個直接在pipline中寫路徑

第二個pipeline使用settings.py中自定義的參數獲取路徑

4)settings.py,需要把ITEM_PIPELINES激活,對應的寫上兩個pipelines。序號小的優先執行。

自定義的路徑參數:

5)運行爬蟲的程序,新建一個runspider.py文件,程序如下。使用這個程序就可以直接在pycharm中運行程序了,不需要切換到命令欄再運行爬蟲了。

運行runspider.py文件,即可得到想要結果。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 樂想屋 的精彩文章:

TAG:樂想屋 |