一、BeautifulSoup
BeautifulSoup是一個擷取HTML/XML內容的套件,提供了非常多友善的方法(Method),協助開發人員可以快速搜尋及取得HTML/XML中的元素,也因此被廣泛的應用在Python網頁爬蟲的技術上。
但是它並無法單獨完整實現Python網頁爬蟲的整個流程,像是發送請求與解析下載的HTML原始碼,所以需要特性的相依性模組來協助,例如:
- requests-對網頁伺服端發送請求,來取得HTML網頁原始碼。
- html.parser或lxml解析器-將取得的HTML原始碼進行解析,才有辦法使用BeautifulSoup套件所提供的搜尋方法,來擷取網頁元素。
特色
- 學習曲線較低,非常容易上手
- 適用於靜態網頁的爬取
使用時機
對於初學者想要學習入門Python網頁爬蟲,或是僅針對特定少數網頁進行爬取的小型專案,就可以選擇BeautifulSoup套件。
教學文章
[Python爬蟲教學]7個Python使用BeautifulSoup開發網頁爬蟲的實用技巧
二、Selenium
Selenium是一個網頁自動化測試的套件,擁有許多網頁操作的方法(Method),像是自動化輸入資料、點擊按鈕及滾動捲軸等,同時具備網頁元素擷取與操作的功能,讓開發人員能夠輕鬆撰寫網頁的自動化測試腳本。
特色
- 能夠輕鬆與JavaScript的事件合作
- 可以處理網頁的AJAX請求
- 自動化操作網頁上的元素
使用時機
當所要爬取的網頁有使用JavaScript / AJAX等動態載入資料的技術,或是具有登入驗證、搜尋機制的網頁,就能夠利用Selenium套件的網頁操作方法(Method),來開發Python網頁爬蟲。
教學文章
- [Python爬蟲教學]整合Python Selenium及BeautifulSoup實現動態網頁爬蟲
- [Python爬蟲教學]3個建構Python動態網頁爬蟲重要的等待機制
- [Python爬蟲教學]學會使用Selenium及BeautifulSoup套件爬取查詢式網頁
- [Python爬蟲教學]快速搞懂AJAX動態載入網頁的爬取秘訣
三、Scrapy
Scrapy本身就是一個網頁爬蟲框架,提供完整的網頁爬蟲開發功能,像是發送請求、檔案匯出、例外處理機制、偵錯(Debug)等,並且是基於Twisted非同步網路框架所建立的,所以能夠非同步的發送請求(Request),有較佳的執行速度,學習曲線也較高。
另外,由於Scrapy是一個框架,所以有一定的專案架構及執行流程,除了未來很好維護外,也能夠輕鬆的移轉既有的專案到另一個專案。
特色
- 執行速度較快
- 允許客製化功能來進行擴充
- 內建多種檔案格式輸出(JSON、XML、CSV)
- 內建支援XPath及CSS表達式來擷取資料
- 完善的互動式偵錯工具(Scrapy Shell)
使用時機
適用於大型的Python網頁爬蟲專案,有一定的效率要求及需要處理複雜的爬取邏輯,Scrapy就會是一個很好的選擇。
四、小結
本文針對三個最常用來實作Python網頁爬蟲的套件與框架來進行比較,當所要建立的Python網頁爬蟲屬於小型專案,或是僅針對特定的網頁來進行爬取,BeautifulSoup套件就可以輕鬆的實現,而如果網頁有登入驗證機制或使用JavaScript / AJAX等動態載入資料的技術,就需要使用Selenium套件來協助。此外,如果是一個大型且複雜的Python網頁爬蟲專案,則使用Scrapy來進行開發,會有較佳的效能及架構。
希望本文的內容能夠幫助您在實務上選擇使用Python網頁爬蟲工具時有所幫助。如果您喜歡我的文章,請幫我按五下Like(使用Google或Facebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。
謝謝你的分析~終於了解這三個的差別了!
回覆刪除你的文章都寫得很完整,我學爬蟲幾乎都是看你的文章,超感謝的XD
希望之後可以看到更多爬蟲相關的文章!