[網頁基礎爬蟲] 用 Python 來做 Web Scraping,擷取 LocateFamily 內的資料

我們在學習或工作的時候,少不免要在網上收集資料。若果牽涉一些數據或統計相關的工作,通常需要收集大量資料,例如分析股票走勢時便要收集大量股價,把網上的數據輸入 Excel 或其他工具以作處理及分析。但很多時候,網上的數據為了較好的排版及視覺效果,呈現的格式對我們把數據輸入 Excel 的工作變得不方便,例如把大量數據分成數千頁顯示,若果要人手逐頁複製到 Excel,恐怕要花上一天時間。這些無聊重覆的工作大家都不想做,所以今天想分享如何用程式收集數據、自動生成一份 csv 檔。

數據收集的途徑

現時網絡上最好的方法大概是用 API,一般大型網站(例如 Twitter、Facebook、Google)都會提供 API 給公眾使用,提取結構化的資料。但並不是所有網站都有提供 API,目的可能是不希望公眾提取到公司大量資料、或者沒有相關技術人員負責。讀者可能還想到 RSS 或其他途徑,但這些方法都有一些限制,在此不以討論。如果這些途徑都不可行的時候,還有其他方法嗎?答案當然是有。接下來會示範如何提取 LocateFamily 的數據並自動生成一份 csv 檔。

Web Scraping

Web Scraping,意思就是用程式技巧來抽取網站上的內容。它有很多的別名,Web Havesting、Web Data Extraction、Web Screen Scraping、Web Data Mining 等等,但就是好像沒有一個中文名字。基本上,任何程式語言都可以做 Web Scraping,由於 Python 是比較容易的程式語言,而且在 Web Scraping 及大數據方面有較齊全的開發工貝,所以今次會用 Python 做示範。(請自行搜尋 Python 安裝教學)

Web Scraping 其實分開兩個工序。第一個工序就是把你需要的網頁下載,第二個工序就是在下載了的網頁中找出有用的資料。正常的網頁內容,其實都是根據 html 標準的,下載之後就是一串很長的 string,就跟你在瀏覽器裡面 view source 看到的一樣。把這一串很長的 string 變成能夠容易解讀、存取特定資料的過程,就叫做 html parsing。

Web Scraping 工序

工序一:下載網頁

我們首先看看第一個工序。要下載一個網頁,其實有很多工具,在 Python 的眾多 library 裡面,比較多人用的就是 Urllib2。(請自行搜尋 Urllib2 安裝教學)

工序二:html parsing

取得了網頁的內容之後(page),我們就要進行 html parsing,再提取出有用的資料。Python 裡面,最常用的工具就是 BeautifulSoup。(請自行搜尋 BeautifulSoup 安裝教學)

parse 完 html 後便可以只抽取其中有用的東西,在 LocateFamily 我們需要的資料都在 class="table" 的表格內(見下圖),所以我們會用以下指令提取所有 <table> tag 並且附有class屬性而其值是table 的表格
然後抽取表格(right_tables)內的有用資料
最後是用 pandas 把 list 轉成 DataFrame 並輸出 csv 檔案

完整程式碼

以下是完整程式碼,抽取 LocateFamily 內香港人的資料

運行結果

以上程式運行完畢會產出 1102 個 csv 檔案(page0001.csv, page0002.csv, ... page1102.csv):

只要上 merge-csv.com 或其他網上工具就可將所有 csv 檔案合併為一個檔案

合併後的檔案:

這樣就可以很輕易的把 LocateFamily 所有香港人的資料整理成一個 csv 檔案了,如果你有更好的方法,歡迎在下方留言,大家彼此交流,謝謝!

留言

這個網誌中的熱門文章

政府T-Contract vs Vendor vs In-house

我的 2 年 Developer 生涯