5种流行的Web抓取Python库,你用过哪种?
“我們有足夠的數據”這句話,在數據科學領域并不存在。
我很少會聽到有人拒絕為他們的機器學習或深度學習項目收集更多的數據,往往都是永遠覺得自己擁有的數據不夠多。
為了緩解這種“數據焦慮”,分析師或數據科學家們練就了必備的技能之一:網站抓取。
用Python執行網站抓取很方便,有大量的庫可以使用,但頭疼的地方也在于此,如何決定哪一個庫適合自己的特定項目?哪個Python庫最靈活?
先不直接給出答案,下文所列舉的是我認為較為通用的5個Python庫,將通過對它們的優劣評估來回答那些疑問。
1.Requests
Requests是一個Python庫,用于發出各種類型的HTTP請求,例如GET,POST等。由于其簡單易用,它被稱為HTTP for Humans。
我想說這是Web抓取最基本但必不可少的庫。但是,請求庫不會解析檢索到的HTML數據。如果要這樣做,還需要結合lxml和Beautiful Soup之類的庫一起使用(將在本文中進一步介紹它們)。
那Requests Python庫有哪些優缺點?
優點:
簡單
基本/摘要身份驗證
國際域名和URL
分塊請求
HTTP(S)代理支持
缺點:
僅檢索頁面的靜態內容
不能用于解析HTML
無法處理純JavaScript制作的網站
2.lxml
lxml是一種高性能,快速,高質生產力的HTML和XML解析Python庫。
它結合了ElementTree的速度和功能以及Python的簡單性。當我們打算抓取大型數據集時,它能發揮很好的作用。
在Web抓取的時候,lxml經常和Requests進行組合來使用,此外,它還允許使用XPath和CSS選擇器從HTML提取數據。
那lxml Python庫的優缺點有哪些?
優點:
比大多數解析器快
輕巧
使用元素樹
Pythonic API
缺點:
不適用于設計不當的HTML
官方文檔不太適合初學者
3.BeautifulSoup
BeautifulSoup也許是Web抓取中使用最廣泛的Python庫。它創建了一個解析樹,用于解析HTML和XML文檔。還會自動將傳入文檔轉換為Unicode,將傳出文檔轉換為UTF-8。
在行業中,將“BeautifulSoup”與“Requests”組合在一起使用非常普遍。
讓BeautifulSoup備受歡迎的主要原因之一,就是它易于使用并且非常適合初學者。同時,還可以將Beautiful Soup與其他解析器(如lxml)結合使用。
但是相對應的,這種易用性也帶來了不小的運行成本——它比lxml慢。即使使用lxml作為解析器,它也比純lxml慢。
下面來綜合看下BeautifulSoup庫的優缺點都有哪些?
優點:
需要幾行代碼
優質的文檔
易于初學者學習
強大
自動編碼檢測
缺點:
比lxml慢
4. Selenium
到目前為止,我們討論的所有Python庫都有一個局限性:不能輕易地從動態填充的網站上抓取數據。
發生這種情況的原因有時是因為頁面上存在的數據是通過JavaScript加載的。簡單概括就是,如果頁面不是靜態的,那么前面提到的Python庫就很難從頁面中抓取數據。
這種情況,就比較適合使用Selenium。
Selenium最初是用于自動測試Web應用程序的Python庫,是用于渲染網頁的Web驅動程序,也正因如此,在其他庫無法運行JavaScript的地方,Selenium就可以發揮作用:在頁面上單擊,填寫表格,滾動頁面并執行更多操作。
這種在網頁中運行JavaScript的能力,使Selenium能夠抓取動態填充的網頁。但是這里存在一個“缺陷”,它為每個頁面加載并運行JavaScript,會使其運行速度變慢,不適合大型項目。
如果不關心時間和速度,那么Selenium絕對是個很好的選擇。
優點:
初學者友好
自動網頁抓取
可以抓取動態填充的網頁
自動化網絡瀏覽器
可以在網頁上執行任何操作,類似于一個人
缺點:
非常慢
設置困難
高CPU和內存使用率
不適用于大型項目
5. Scrapy
現在是時候介紹Python Web抓取庫的BOSS——Scrapy!
Scrapy不僅僅單純是一個庫,它是Scrapinghub的聯合創始人Pablo Hoffman和Shane Evans創建的整個Web抓取框架,是一款功能完善的網頁抓取解決方案,可以完成所有繁重的工作。
Scrapy提供的蜘蛛機器人可以抓取多個網站并提取數據。使用Scrapy,可以創建自己的蜘蛛機器人,將其托管在Scrapy Hub上,或作為API。在幾分鐘內就可以創建功能齊全的蜘蛛網,當然也可以使用Scrapy創建管道。
關于Scrapy最好的一點在于它是異步的,這意味著可以同時發出多個HTTP請求,能夠為我們節省很多時間并提高效率(這不是我們正為之奮斗的嗎?)。
我們還可以向Scrapy添加插件來增強其功能。盡管Scrapy無法像selenium一樣處理JavaScript,但可以將其與名為Splash的庫(輕量級Web瀏覽器)配對。借助Splash,Scrapy就能實現從動態網站提取數據。
優點:
異步
優秀的文檔
各種插件
創建自定義管道和中間件
CPU和內存使用率低
精心設計的架構
大量可用的在線資源
缺點:
學習門檻較高
過分的輕松工作
不適合初學者
這些是我個人覺得很有用的Python庫,如果有其他你使用起來不錯的庫,歡迎留言評論~
原文鏈接:
https://www.analyticsvidhya.com/blog/2020/04/5-popular-python-libraries-web-scraping/
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的5种流行的Web抓取Python库,你用过哪种?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020年高考西工大附中成绩分析
- 下一篇: C#编程语言之常见的异常类型