資料分析起手式「資料爬蟲」:分享 Python 網頁爬蟲的學習地圖與策略|專家論點【維元】

圖片來源:freepik

資料爬蟲是資料分析的起手式,必須有好的、可用的資料才得以進行高品質的資料科學專案。而過去的資料來源多半來自公司內部的資料庫或資料倉儲系統,仰賴於工程師跟 IT 部門的支援。
但隨著 Big Data 的技術到位,實務上對於資料的要求更加大量也更加多元。因此,利用程式與資料爬蟲收集資料,是目前資料來源的一個重要的管道。
本篇文章將針對「網頁收集的開發工具生態系」、「學習資料爬蟲的幾個階段」以及「打造爬蟲是資料人的基本技能」三個段落,分享 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 實現資料爬蟲是非常熱門的一項工作,也有許多相關的工具出現可以使用。真實資料爬蟲其實比想像中的更複雜,流程大概會像這樣:

但對於新手來說,該如何尋找到適合的工具其實是很麻煩的。關於初學爬蟲的新朋友來說,我會這樣建議學習:

  1. 熟悉 Python 語言的基本應用
  2. 找到想要實現資料爬蟲的網站
  3. 初步理解哪些資料是靜態的、哪些是動態的
  4. 先利用靜態爬蟲收集資料
  5. 在開始處理動態網頁資料
  6. 試著把爬蟲變成自動化與多頁面收集
  7. 持續練習⋯

總結來說,就是先採小規模的收集。再逐步處理更多的資料,導入更複雜的工具,不用一開始就想要什麼都處理。

打造爬蟲是資料人的基本技能

過去的資料來源多半來自於公司內部的資料庫或資料倉儲系統,仰賴於工程師跟 IT 部門的支援。但隨著 Big Data 的技術到位,實務上對於資料的要求更加大量也更加多元。
現在對於資料的使用者其實很廣泛,通常很多資料的需求也都是實現性的。這種情況下可能沒有那麼多的工程師或開發人力能夠隨時提供彈性的資料,因此打造資料收集力已經成為所有資料工作者的必備技能了。


嗨,我是維元,目前是一名資料科學與網頁開發的雙棲工程師。近期也擔任科技島社群的駐站專家,持續分享發表對 #資料科學、 #網頁開發 或 #軟體職涯 相關的文章。如果對於內文有疑問都歡迎與我們進一步的交流,都可以追蹤資料科學家的工作日常 Facebook 粉專 或 Instagram 帳號,也會不定時的舉辦分享活動,一起來玩玩吧!

瀏覽 1,160 次

覺得不錯的話就分享出去吧!

發佈留言

Back to top button