Scrapy是python上很受歡迎的爬網框架,官方網站為:http://doc.scrapy.org/en/latest/index.html.介紹Scrapy的網站很多,官網自己就寫得很清楚,一些中文化的資料可參考像是http://www.addbook.cn/book/scrapy中文手册等資料.今天主要介紹的是爬網之後的動作.爬網並不是單純爬文而已,而是為了提供之後進一步的分析,所以資料都必須儲存下來,儲存的方式有很多種,可以單純是個file,再由分析軟體來處理資料,或是把資料放在資料庫中,做進一步的分析.
之前所做的爬網專案,爬網下來後的資料是轉成csv檔後丟給R做分析,分析後直接產生report.但是這樣的方式卻有個缺點--資料難以再利用.為了加 強資料可利用性以及爬網的彈性,所以開始嘗試使用JSON之類的NOSQL方案來儲存爬網資料.格式決定了,那資料庫呢?知名的NOSQL DB像是Mongo等都在考慮範圍內,但是如果RDB資料放一個DB,NOSQL資料又放一個DB這樣子徒增資料串連的困擾,幸好一些傳統RDB資料庫也 開始支援NOSQL的格式,其中處理的不錯,又是開源軟體,同時也是公司使用的企業DB,在這樣的交集之下,選擇了postgreSQL來作為存放爬網資 料的首選.
爬網框架確定,資料格式確定,DB確定,接下來就是把這三個東西兜在一起.
-
設定Scrapy:基本的設定我就偷懶了,官方文件講得很清楚XD
http://doc.scrapy.org/en/latest/intro/tutorial.html#creating-a-project
設定好後介紹一下每個檔案的設定內容 - 爬網機器人主程式路徑:
這個裡面放了主要的爬蟲程式,包括網址,parsing路徑以及方法:
- Class宣告:
這邊是主程式的內容,宣告物件名稱的時候,需要繼承一個Spider,Scrapy提供了各種Spider可以用(http://doc.scrapy.org/en/latest/topics/spiders.html#spider-arguments).我目前使用的是最基本的Spider,還有CrawlSpider等其他厲害的爬蟲可以設定.
這邊我設定了三個值:
- name:crawler的名字,在呼叫時需要用到
- allowed_domains:要爬哪個網域
- start_urls:初始要爬的網址,每個網址會產生不同的response往下面丟,我這邊是用迴圈控制要爬的頁面數量.
- 方法宣告:
- parse():在start_urls爬下來的網頁會變成response 丟到parse()裡面去,其實在parse裡面就可以設定parsing,但是我是參考別人把這兩塊分開,所以利用callback呼叫了 parse_profile,把真正的parsing部分放在後面.
- parse_profile():這邊放了要parsing的資料,因為只是一個小POC,所以沒有太複雜的結構,單純的把爬下來的東西丟回item,item是在items.py中設定的欄位.
- 比較值得注意的是item['total']這個欄位,因為目標是要在DB中儲存JSON檔案,而postregSQL中,JSON格式的檔案是佔一個欄位,所以我特別將欄位拉出來,直接把整個item物件轉成dictionary格式丟進去.(因為Scrapy在設計item物件來存放資料時,就是使用key-value pair的方式來儲存資料,可以直接轉換成dictionary)
原本想說基本設定官方說明很清楚,沒有打算扯太多,沒想到還是想得太細節...只好分段落補完了.整個程式不長,花最多時間的還是在處理encoding的事情...orz
留下你的回應
以訪客張貼回應