推薦幾個值得關注的爬蟲庫

轉載自公衆號:easypython

爬蟲速度太慢?在這裏推薦幾個值得關注的異步爬蟲庫,給你的爬蟲提速。看看有沒有你沒聽過的?

類似 Requests 的庫

爲什麼要推薦類似 Requests 的庫呢?Requests 不夠好嗎?

雖然 Requests 對於新手很容易上手,但它是同步的、並不是異步設計的。在 HTTP 請求的時候是需要 IO 等待的。比如說,當你使用 Requests 庫進行請求,網站進行返回的時候,這時 IO 就會阻塞,程序就需要等待網站的返回,這就讓爬取速度變慢了。

那麼異步的好處在哪呢?(侯爵老師興奮的停不下來,繼續說着)

Python 的代碼是一行行去執行。也就是說,如果哪一行是非常耗時間的,之後的所有事情都會等到它完成才執行。因此 Python 異步編程也就應運而生用來解決這個問題。異步的方式在於你寫的這些代碼中哪些是執行時間非常短的,那麼就先執行,耗時的操作會被擱在後面,並且執行這個過程完全都由 Python 的異步庫自己來進行調控。

這樣的好處就是隻寫少量的代碼也能達到不錯的效率,同時在代碼可讀性上也變得更加直觀了。

下面這幾個庫,都是類似 Requests 的用法但是基於異步的設計。

https://github.com/aio-libs/aiohttp

最推薦:aiohttp

aiohttp 是純粹的異步框架,同時支持 HTTP 客戶端和 HTTP 服務端,可以快速實現異步爬蟲。坑比其他框架少。並且 aiohttp 解決了requests 的一個痛點,aiohttp 可以輕鬆實現自動轉碼,對於中文編碼就很方便了。

https://github.com/theelous3/asks

第二推薦:asks

Python 自帶一個異步的標準庫 asyncio,但是這個庫很多人覺得不好用,甚至是 Flask 庫的作者公開抱怨自己花了好長時間才理解這玩意,於是就有好事者撇開它造了兩個庫叫做 curio 和 trio,而這裏的 ask 則是封裝了 curio 和 trio 的一個 http 請求庫。

用起來和 Requests 90%相似,新手也可以很快上手。

https://github.com/vibora-io/vibora

第三推薦:vibora

號稱是現在最快的異步請求框架,跑分是最快的。寫爬蟲、寫服務器響應都可以用。

但這個項目一直在重構,這誰受得了。現在頁面上還掛着項目正在重構的警告,使用需謹慎啊。

類似 Selenium ****的庫

Selenium +webdriver 可以用來模擬用來模擬瀏覽器請求,它也是同步的、而不是異步設計的。而下面這些庫不光是從效率上,還有易用性上也比 selenium 進化了不少。

https://github.com/miyakogi/pyppeteer

最推薦:Pyppeteer

Pyppeteer 是異步無頭瀏覽器(Headless Chrome),從跑分來看比 Selenium + webdriver 快,使用方式是最接近於瀏覽器的自身的設計接口的。它本身是來自 Google 維護的 puppeteer,但是按照 Python 社區的梗,作者進行了封裝並且把名字中的 u 改成了 y 🙈

特點是異步的設計,接口非常瀏覽器化,注入 JS 也很方便。

https://github.com/tryolabs/requestium

第二推薦:Requestium

Requests 的作者 Kenneth Reitz 曾經轉發稱讚過這個庫。

Requestium 是 Requests 和 Selenium 封裝的產物,並且提供了友好的接口切換,這樣就可以根據需求切換了。

值得一提的是,Requestium 有一個 Wait Until 的方便設計,它的作用是確保頁面中的某一個元素出現了纔會進行下面的代碼,這樣一來就很輕鬆的避免了一些詭異的錯誤。GitHub 頁面上有一組示例,是使用 Requestium 以及使用 Requests + Selenium + lxml 的對比,可以很明顯看出區別。

https://github.com/HDE/arsenic

第三推薦:arsenic

HDE 公司用在了實際生產中的項目抽離出來的框架。和 selenium 接口幾乎一致,學習成本相對較低。不同在於是異步的設計。不過文檔有點糟糕。

框架

https://github.com/lorien/grab

**最推薦:Grab **

前端圈很流行說漸進式框架,那麼 Grab 可以說是爬蟲界的漸進式框架。想簡單用時有簡單的用法,想複雜使用時也有複雜的用法。封裝的很好,基於生成器異步的設計。

https://github.com/kkyon/botflow

**第二推薦:botflow **

國人作者。概念很新穎,定位成了處理數據工作流的框架,可以用來爬蟲、機器學習、量化交易等等。

https://github.com/howie6879/ruia

**第三推薦:ruia **

國人作者。比較接近 Scrapy 的使用方式,異步設計。作者也在知乎但是很低調 @howie

非 Python 框架

https://github.com/gocolly/colly

**Golang 爬蟲框架 **

應該是 Golang 裏使用量最多的爬蟲框架了。Golang 語言本身就對併發支持很好。讓你在使用時只考慮業務本身就可以。框架結構化、清晰、代碼好讀。

https://github.com/yujiosaka/headless-chrome-crawler

**nodejs 爬蟲框架 **

JS 圈裏的一個奇葩,整個爬蟲都基於 Chrome ,並且自帶一個調度隊列。實際測試速度和穩定性均不俗。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章