資料爬蟲是資料分析的起手式,必須有好的、可用的資料,才得以進行高品質的資料科學專案。而過去的資料來源多半來自公司內部的資料庫或資料倉儲系統,仰賴於工程師跟 IT 部門的支援。但隨著 Big Data 的技術到位,實務上對於資料的要求更加大量也更加多元。
因此,利用程式與資料爬蟲收集資料是目前資料來源的一個重要的管道。本篇文章將針對「Python 與網頁收集的生態系」、「學習資料爬蟲的幾個階段」以及「打造爬蟲是資料人的基本技能」三個段落,分享 Python 網頁爬蟲的學習地圖與策略。
R、Python 與 Julia 三大程式語言怎麼選?來自資料科學家的觀點
Python 與網頁收集的生態系
網頁爬蟲的工作核心目標是:「將網路的資料下載回本地的電腦上」,過程中可能會涉及幾個工作:「怎麼把資料下載回來」、「怎麼整理成想要的資料」以及「資料要存在哪裡」幾個項目。將網路資料下載回本地電腦上的過程式基於 HTTP(HyperText Transfer Protocol)的規範,採用 Request 與 Response 的交換機制得到資料。
網路爬蟲其實就是模擬使用者的行為,發出一個請求後把收到的資料攔截起來,基本上可以簡化為以下流程:
許多人會選擇 Python 做為程式開發或資料科學的入門語言,因為其「語法容易」與「第三方資源豐富」兩個特性。所謂的「第三方資源豐富」是指,Python 可以搭配許多套件來完成特定領域的工作。所以 Python 在爬蟲領域也如此,以下可以分為幾種不同的應用場景與對應的工具:
資料科學家、資料分析師、資料工程師,實務上如何在資料團隊分工
模擬請求與攔截回應
- 靜態網站的資料取得:Requests / urllib
第一步模擬請求(Request)與攔截回應(Response),可以利用 Requests / urllib 兩個工具來實現。這兩個套件都是在 Pythoon 中模擬 HTTP 的套件,可以用來處理網頁的溝通。
整理/清理資料
- 網頁資料的解析爬取:BeautifulSoup / Pyquery / Xpath
第二步是取回資料之後,該怎麼辦?利用 HTTP 得到的網頁資料是網頁的 HTML 原始碼,包含許多網頁的標籤。我們可以利用 BeautifulSoup、Pyquery 或 Xpath 幫助我們從網頁原始碼中解析出需要的資料,並進行整理。
動態網站的資料取得
- 動態網站的資料取得:Selenium / PhantomJS / Ghost
動態網頁與靜態網頁最大的不同,是資料是在什麼時間點取得的。動態網頁是在瀏覽器已經取得 HTML 後,才透過 JavaScript 在需要時動態地取得資料。因此,爬蟲程式也必須要考慮動態取得資料這件事情,才有辦法正確地找到想要的資料。這種情況可以搭配 Selenium 、PhantomJS 或 Ghost 模擬瀏覽器產生資料的過程。不過 PhantomJS 和 Ghost 都沒有持續更新,可以改用
多頁面的爬蟲框架
- 多頁面的爬蟲框架:Scrapy / Pyspider
資料爬蟲最早期的需求是來自於搜尋引擎,把整個網路視為是一個蜘蛛網,那麼蜘蛛就是在網上爬來爬去的蜘蛛。從搜尋引擎所設計的網路爬蟲程式,通常會用於整個網站的收集。如果需要的是超過一種頁面的網頁爬蟲的話,就必須導入 Scrapy 或 Pyspider 之類的工具。
學習資料爬蟲的幾個階段
Python 實現資料爬蟲是非常熱門的一項工作,也有許多相關的工具出現可以使用。真實資料爬蟲其實比想像中的更複雜,流程大概會像這樣:
但對於新手來說,該如何尋找到適合的工具其實是很麻煩的。關於初學爬蟲的新朋友來說,我會這樣建議學習:
- ⓪ 熟悉 Python 語言的基本應用
- ① 找到想要實現資料爬蟲的網站
- ② 初步理解哪些資料是靜態的、哪些是動態的
- ③ 先利用靜態爬蟲收集資料
- ④ 在開始處理動態網頁資料
- ⑤ 試著把爬蟲變成自動化與多頁面收集
- ⑥ 持續練習⋯⋯
總結來說,就是先採小規模的收集,再逐步處理更多的資料,導入更複雜的工具,不用一開始就想要什麼都處理。
資料科學五大 Q&A:如何成為資料科學家?資料科學產業的未來?
打造爬蟲是資料人的基本技能
過去的資料來源多半來自於公司內部的資料庫或資料倉儲系統,仰賴於工程師跟 IT 部門的支援。但隨著 Big Data 的技術到位,實務上對於資料的要求更加大量也更加多元。
現在對於資料的使用者其實很廣泛,通常很多資料的需求也都是實現性的。這種情況下可能沒有那麼多的工程師或開發人力能夠隨時提供彈性的資料,因此打造資料收集力,已經成為所有資料工作者的必備技能了。
(原文發表於「資料科學家的工作日常」,原標題為〈Python 網頁爬蟲的學習地圖與策略〉)