[網頁基礎爬蟲] 用 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 檔案了,如果你有更好的方法,歡迎在下方留言,大家彼此交流,謝謝!
留言
張貼留言