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