2014年12月17日 星期三

[Python][教學] Scrapy(Web Crawler) to PostgreSQL(二)postgreSQL資料庫連接設定


        上一篇[Python] Scrapy(Web Crawler) to PostgreSQL(一)簡介 & 爬蟲基本設定介紹了網路爬蟲的基本設定後,這篇就是要接著介紹如何設定postgreSQL.首先我們要先安裝PostgreSQL(這句好像有點廢話).到官方網站(http://www.postgresql.org)找到屬於自己作業系統的連結,Mac可以到(http://postgresapp.com)下載postgreapp,點開來安裝,單機版的設定相當簡單.如果習慣透過command line呼叫postgreSQL的話,還需要到http://postgresapp.com/documentation/cli-tools.html設定PATH.
        安裝好DB後,繼續回到Scrapy上.要連結並操作PostgreSQL,有幾個檔案需要設定,以下將一一介紹:

  • settings.py
    這邊放了所有關於爬蟲的設定,這邊只介紹跟DB有關的:
在Settings.py裡面,需要在DATABASE這個參數中定義相關username,password,以及要建立的database.因為是單機操作,所以host和port使用預設值localhost和5432.
ITEM_PIPELINES參數指的是Scrapy的資料流,要透過mobile01資料夾中的pipeline.py中的Mobile01Pipeline這個物件來操作.
  • pipeline.py
    這個檔案處理如何連結資料庫,以及連結資料庫後的動作

pipeline.py檔案裡面只有一個物件,物件裡面分成兩塊:
  1. __init__定義了Session物件來取得Access的權限.這邊的db_connect()是放在另外一個models.py(這個模組控制了postgreSQL的變項處理方式)裡面,但是放在pipeline.py中也是ok的.
  2. 比較重要的是process_item,這塊控制了Scrapy處理完後的資料要怎麼丟,這邊會先將models.py中的物件打包起來,然後透過取得的session,透過add以及commit的方式塞到DB裡面.
  • items.py
    需要在這裡設定主要想抓的變項,也就是爬蟲主程式中parsing完的資料存放的欄位名稱
  • models.py
    這邊的作用與items.py類似也是設定變項,但是是針對postgreSQL變項欄位的設定:
Scrapy與PosgreSQL的介接是透過SQLAlchemy(http://www.sqlalchemy.org)這個模組來控制(另外再加上Psycopg2),我們需要從中import包括create_engine,資料的欄位格式,資料的mapper等等.因為我們也需要儲存JSON格式的資料,所以必須從sqlalchemy.dialects.postgresql import JSON進來才能使用.
  1. 與DB控制相關的方法都放在de_connect()和create_deals_table()中.
  2. Class Deals定義要放進PostgreSQL的欄位以及欄位定義.JSON的格式也是在這時候定義.
以上的設定方式主要參考http://newcoder.io/scrape/intro/這邊文章,配合一些個人的需求修改而成(主要是JSON格式的運用).我們將在下一篇文章demo串起來的成果.