一、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基金會出資,完全不會花到錢,感謝大家。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYqMPD_mPLEileg1IdrsIYhFSWZkYFKYmEnUqWqiqdiJv2XYnkT23CFcXoTN6HBtGCEUylgVoUIVKm6KPRPM_TjcjsSei4lGE_YmZdrWA6Ulw1fp6-o8Cn-bVwr7_FANFoC4tjTe-ak6w-atFYq-a1pipQbZvQzt4wHRNK7tywcSG0dSCnpJpqoMP5wA/s1600/Python%E7%B6%B2%E9%A0%81%E7%88%AC%E8%9F%B2%E5%85%8D%E8%B2%BB%E7%B7%9A%E4%B8%8A%E5%9F%B9%E8%A8%93.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-fK9Da5M7X1lSpbZVan4Eo-PunVnQv-YHw3EDahTUhZr5FayVLaCPqrW44W3_xwQQO-gAWZEwe_A-SxL_nltT__ArbFOgLYAAIsi3RzETT9GqVsfyfN9PXDs-xGTkxZSqj_W1SCxwD2UcrJLqHZSYIrLB-HIU75vSom4YoqoWFUQz_o4PbnvTQUbE6Bab/w640-h426/2.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg61JC7N1hyphenhyphenPpzb1hNJauunevoWrOsJxk_Upz0ywnLtIAJ2rdd1ZxChyphenhyphenFPq8GHYfywtHv2mTce5NGdwwxWFWYARhA6In0xlOzkwlRb9kM04mwgdy9Un9JgVCoLQnwV25oUcitQy2OY4TeA3gVIs067wR4StGfkldbykOeL3TfPchWfNClWKhL10ZzWaxFtf/w640-h426/3.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh1XFQE0AmkZHSFB0Icq3uY4_FdsIYZ9nUqllOlo9ulRu0ri-LS1OeW2ybKOO2QRg-gyUOUr_3sMLYf7S4Q5ULZpIcXsS1pAkSMPm0OwqpbnLET51WEpQ3EoY5WaEVEWyTixBkRqp2tA7SpePM_MCIY6tnyUvu917rulqbLJTEEPsEho6Q-4Tf74DFdakd/w640-h426/4.png)
謝謝你的分析~終於了解這三個的差別了!
回覆刪除你的文章都寫得很完整,我學爬蟲幾乎都是看你的文章,超感謝的XD
希望之後可以看到更多爬蟲相關的文章!