一篇文章教會你理解和定義Scrapy爬蟲框架中items.py文件

在前面幾篇文章中我們已經學會了如何了編寫Spider去獲取網頁上所有的文章鏈接及其對應的網頁目標信息。在這一篇文章中,我們將主要介紹Scrapy中的Item。

在介紹Item之前,我們需要知道明確一點,網絡爬蟲的主要目標就是需要從非結構化的數據源中提取出結構化的數據,在提取出結構化的數據之後,怎麼將這些數據進行返回呢?最簡單的一種方式就是將這些字段放到一個字典當中來,然後通過字典返回給Scrapy。雖然字典很好用,但是字典缺少一些結構性的東西,比方說我們容易敲錯字段的名字,容易導致出錯,比方說我們定義一個字段comment_nums,但是在另外一個爬蟲中我們將傳遞過來的該字段寫成comment_num,少了個s,那麼屆時到pipeline中統一處理字典的時候就會發生錯誤。

一篇文章教會你理解和定義Scrapy爬蟲框架中items.py文件

為了將字段進行完整的格式化,Scrapy為我們提供了Item類,這些Item類可以讓我們自己來指定字段。比方說在我們這個Scrapy爬蟲項目中,我們定義了一個Item類,這個Item裡邊包含了title、release_date、url等,這樣的話通過各種爬取方法爬取過來的字段,再通過Item類進行實例化,這樣的話就不容易出錯了,因為我們在一個地方統一定義過了字段,而且這個字段具有唯一性。

這個Item有些類似我們常說的字典,但是它的功能要比字典更加齊全一些。同時當我們對Item進行實例化之後,在Spider爬蟲主體文件裡邊,我們通過parse()函數獲取到目標字段的Item類,我們直接將這個類進行yield即可,然後Scrapy在發現這是Item類的一個實例之後,它就會直接將這個Item載入pipeline中去。這樣的話,我們就可以直接在pipeline中進行數據的保存、去重等操作。以上就是Item帶給我們的好處。

接下來我們一起來到items.py文件,去定義item,如下圖所示。

一篇文章教會你理解和定義Scrapy爬蟲框架中items.py文件

在這個文件中默認已經給出了示例代碼,我們可以直接在這個示例代碼中寫入代碼,當然也可以自定義的重新寫一個類,形如示例代碼這種模式即可。這個類需要繼承scrapy中的Item,默認是已經給出來的,即scrapy.Item。下面我們根據自己待獲取的目標信息的字段,在這個Item中去定義具體的字段。關於具體目標信息的字段提取,在之前的文章也有提及,主要有title、release_date、url、front_img_url、tag、voteup_num、collection_num、comment_num、content等,如下圖所示。

一篇文章教會你理解和定義Scrapy爬蟲框架中items.py文件

在Item當中,它只有Field這一種類型,這個Field表示任何傳遞進來的數據類型都可以接收的,從這個角度來看,確實和字典有些相似。在這個文件中主要是更改字段,Item的右邊統一為scrapy.Field()。由於需要不斷的進行復制,這裡介紹一個在Pycharm中的快捷鍵Ctrl+d,這個快捷鍵可以自動的複製鼠標光標所在的某一行的代碼,可以很快的幫助我們複製代碼,相當於Windows下的Ctrl+c和Ctrl+v。

一篇文章教會你理解和定義Scrapy爬蟲框架中items.py文件

至此,關於Scrapy爬蟲框架中的items.py文件的介紹至此先告一段落,目前我們已經完成了所有item的定義,定義完成之後,接下來我們便可以去爬蟲主體文件中對具體的item值分別進行填充了。


看完本文有收穫?請轉發分享給更多的人,想學習更多,請關注“IT共享之家”!


分享到:


相關文章: