資料爬蟲是資料分析的入門磚,Python 更是資料爬蟲的熱門工具。因為熱門,所以也會有許許多多相關的配套工具出現。但對於新手來說,該如何尋找到適合的工具其實是很麻煩的。這一篇文章會介紹一下幾個比較主流的相關工具,與他們適合的使用時機。
Requests / urllib
Requests 或是 urllib 這兩個套件都是用於處理 HTTP 協定的工具。 urllib 是內建於 Python 有比較完整的 HTTP 的功能(包含網址編碼、檔案下載之類的),Requests 則比較著重在友善地處理 Request/Response 的傳輸。
BeautifulSoup / Pyquery
BeautifulSoup 與 Pyquery 是用在接到 HTML 字串的 Response 之後,要如何將他們解析為一個 DOM base 的物件使用。 lxml 跟 html5lib 是兩個作為讀懂 HTML 字串的解析器(parser)。這兩個套件都支援使用類似 css selector 的方式找資料。
Xpath
XPath 是基於 XML 格式的定位技術,也可以將 HTML 視為是 XML 的方式處理,再使用 XPath 找到需要的資料。
Selenium
Selenium 原本是用於網頁測試的瀏覽器模擬工具。但隨著動態網頁/AJAX 的技術方法,僅透過 Requests 的話會遇到 JavaScript loading 的問題,因此可以搭配 Selenium 這樣的瀏覽器模擬工具,來達到執行 JavaScript 的效果。
PhantomJS
原本的 Selenium 模擬工具需要呼叫實體的瀏覽器,像是 Chrome、Firefox 之類的,會造成資源與效能的問題。 PhantomJS 則是一個在 Selenium 中的虛擬瀏覽器方案,可以在不須開啟實體瀏覽器的情況下進行模擬。
Ghost
前面提到的 Selenium 是為了解決無法執行 JavaScript 的動態網頁問題,是透過真的模擬瀏覽器的運作來處理。 Ghost 則是透過 Python 中來模擬 JavaScript 的程式,達到動態產生資料的目標。
Scrapy
前面講的主要是「基於一個網頁的資料擷取爬蟲」,而 Scrapy 則是一個爬蟲的框架,目標是想要一次將多個網頁都爬取下來。
Pyspider
Pyspider 提供了 Web UI 操作頁面的爬蟲框架,他也能支援多個網頁的下載。
小結
以上這些爬蟲工具大致可以分為幾個型別:
- 靜態網站的資料取得:Requests / urllib
- 網頁資料的解析爬取:BeautifulSoup / Pyquery / Xpath
- 動態網站的資料取得:Selenium / PhantomJS / Ghost
- 多頁面的爬蟲框架:Scrapy / Pyspider
License
本著作由Chang Wei-Yaun (v123582)製作, 以創用CC 姓名標示-相同方式分享 3.0 Unported授權條款釋出。