利用aiohttp制作異步爬蟲

簡介

asyncio可以實(shí)現(xiàn)單線程并發(fā)IO操作,是Python中常用的異步處理模塊。關(guān)于asyncio模塊的介紹,筆者會(huì)在后續(xù)的文章中加以介紹,本文將會(huì)講述一個(gè)基于asyncio實(shí)現(xiàn)的HTTP框架——aiohttp,它可以幫助我們異步地實(shí)現(xiàn)HTTP請求,從而使得我們的程序效率大大提高。

本文將會(huì)介紹aiohttp在爬蟲中的一個(gè)簡單應(yīng)用。

在原來的項(xiàng)目中,我們是利用Python的爬蟲框架scrapy來爬取當(dāng)當(dāng)網(wǎng)圖書暢銷榜的圖書信息的。在本文中,筆者將會(huì)以兩種方式來制作爬蟲,比較同步爬蟲與異步爬蟲(利用aiohttp實(shí)現(xiàn))的效率,展示aiohttp在爬蟲方面的優(yōu)勢。

同步爬蟲

首先,我們先來看看用一般的方法實(shí)現(xiàn)的爬蟲,即同步方法,完整的Python代碼如下:

image

輸出結(jié)果如下:

image
image

程序運(yùn)行了23.5秒,爬取了500本書的信息,效率還是可以的。我們前往目錄中查看文件,如下:

image

異步爬蟲

接下來我們看看用aiohttp制作的異步爬蟲的效率,完整的源代碼如下:

image

我們可以看到,這個(gè)爬蟲與原先的一般方法的爬蟲的思路和處理方法基本一致,只是在處理HTTP請求時(shí)使用了aiohttp模塊以及在解析網(wǎng)頁時(shí)函數(shù)變成了協(xié)程(coroutine),再利用aysncio進(jìn)行并發(fā)處理,這樣無疑能夠提升爬蟲的效率。它的運(yùn)行結(jié)果如下:

image

2.4秒,如此神奇!?。≡賮砜纯次募膬?nèi)容:

image

總結(jié)

綜上可以看出,利用同步方法和異步方法制作的爬蟲的效率相差很大,因此,我們在實(shí)際制作爬蟲的過程中,也不妨可以考慮異步爬蟲,多多利用異步模塊,如aysncio, aiohttp。另外,aiohttp只支持3.5.3以后的Python版本。

當(dāng)然,本文只是作為一個(gè)異步爬蟲的例子,并沒有具體講述異步背后的故事,而異步的思想在我們現(xiàn)實(shí)生活和網(wǎng)站制作等方面有著廣泛的應(yīng)用,本文到此結(jié)束,歡迎大家交流~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ??asyncio可以實(shí)現(xiàn)單線程并發(fā)IO操作,是Python中常用的異步處理模塊。關(guān)于asyncio模塊的介紹,筆...
    山陰少年閱讀 1,438評論 0 2
  • 轉(zhuǎn)一篇駒神的關(guān)于異步編程和Asyncio的文章。這是上篇,共三篇。原文地址:http://aju.space/20...
    SeanCheney閱讀 9,909評論 2 99
  • 1 什么是異步編程 通過學(xué)習(xí)相關(guān)概念,我們逐步解釋異步編程是什么。 1.1 阻塞 程序未得到所需計(jì)算資源時(shí)被掛起的...
    hugoren閱讀 2,762評論 2 10
  • 上篇 中篇 下篇 1 什么是異步編程 1.1 阻塞 程序未得到所需計(jì)算資源時(shí)被掛起的狀態(tài)。 程序在等待某個(gè)操作完成...
    秦時(shí)明星閱讀 1,180評論 0 3
  • 劉襄鈺 我喜歡那春天的生機(jī)。春在枝頭,柳條嫩綠,桃花紅艷;春在空中,春風(fēng)送暖,燕子翻飛;春在田間,麥苗返青,...
    青春的節(jié)拍閱讀 254評論 0 0

友情鏈接更多精彩內(nèi)容