online gambling singapore online gambling singapore online slot malaysia online slot malaysia mega888 malaysia slot gacor live casino malaysia online betting malaysia mega888 mega888 mega888 mega888 mega888 mega888 mega888 mega888 mega888 [Python][教學] Scrapy(Web Crawler) to PostgreSQL(一)簡介 & 網路爬蟲基本設定

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確定,接下來就是把這三個東西兜在一起.
 

         這個裡面放了主要的爬蟲程式,包括網址,parsing路徑以及方法:
  • import項目:
        就是按照官網教學,把該import的東西import進來.items是上一層目錄放的檔案,裡面的Item為items.py中的主要物件,設定了輸出的欄位.
  • Class宣告:
 
        這邊是主程式的內容,宣告物件名稱的時候,需要繼承一個Spider,Scrapy提供了各種Spider可以用(http://doc.scrapy.org/en/latest/topics/spiders.html#spider-arguments).我目前使用的是最基本的Spider,還有CrawlSpider等其他厲害的爬蟲可以設定.
這邊我設定了三個值:
  1. name:crawler的名字,在呼叫時需要用到
  2. allowed_domains:要爬哪個網域
  3. start_urls:初始要爬的網址,每個網址會產生不同的response往下面丟,我這邊是用迴圈控制要爬的頁面數量.
  • 方法宣告:
  1. parse():在start_urls爬下來的網頁會變成response 丟到parse()裡面去,其實在parse裡面就可以設定parsing,但是我是參考別人把這兩塊分開,所以利用callback呼叫了 parse_profile,把真正的parsing部分放在後面.
  2. parse_profile():這邊放了要parsing的資料,因為只是一個小POC,所以沒有太複雜的結構,單純的把爬下來的東西丟回item,item是在items.py中設定的欄位.
  3. 比較值得注意的是item['total']這個欄位,因為目標是要在DB中儲存JSON檔案,而postregSQL中,JSON格式的檔案是佔一個欄位,所以我特別將欄位拉出來,直接把整個item物件轉成dictionary格式丟進去.(因為Scrapy在設計item物件來存放資料時,就是使用key-value pair的方式來儲存資料,可以直接轉換成dictionary)
 
原本想說基本設定官方說明很清楚,沒有打算扯太多,沒想到還是想得太細節...只好分段落補完了.整個程式不長,花最多時間的還是在處理encoding的事情...orz

留下你的回應

以訪客張貼回應

0
  • 找不到回應