成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

異步爬蟲和同步單線程爬蟲對比

Tecode / 2012人閱讀

摘要:通常需要用爬蟲的場景都需要并發(fā)或并行,也就離不開進程線程或協(xié)程,而本示例就是一個簡單的異步爬蟲與同步爬蟲的對比。

通常需要用爬蟲的場景都需要并發(fā)或并行,也就離不開進程、線程或協(xié)程,而本示例就是一個簡單的異步爬蟲與同步爬蟲的對比。

代碼
異步爬蟲代碼:

import asyncio
import json
import aiohttp

from typing import List Optional
from datetime import datetime

class Spider:

def __init__(self urls: List[str] headers: Optional[dict] = None cookie: Optional[str] = None):
    self.urls = urls
    self.headers = headers
    self.cookies = None if cookie else {cookie: cookie}

    self.loop = asyncio.get_event_loop()

    self.result = list()

def excute(self):
    self.loop.run_until_complete(self.spiders())
    self.loop.close()

    with open(main.json w) as f:
        json.dump(self.result f)

async def spiders(self):
    semaphore = asyncio.Semaphore(250)
    spider = [self.run(url semaphore) for url in self.urls]
    await asyncio.wait(spider)

async def run(self url semaphore):
    async with semaphore:
        async with aiohttp.ClientSession(loop=self.loop headers=self.headers cookies=self.cookies) as session:
            async with session.get(url) as response:
                text = await response.text()
                self.result.append(json.loads(text))

if name == "__main__":

urls = []
for i in range(1 1001):
    urls.append(fhttp://httpbin.org/anything?page={i})
s = Spider(urls)
start = datetime.now()
s.excute()
end = datetime.now()
print((end - start).total_seconds() "秒")

同步爬蟲代碼:

import json
import requests

from datetime import datetime

if name == "__main__":

start = datetime.now()
result = []
for i in range(1 1001):
    url = fhttp://httpbin.org/anything?page={i}
    result.append(requests.get(url).json())

with open(test.json w) as f:
    json.dump(result f)

end = datetime.now()
print((end - start).total_seconds() "秒")

結(jié)果
異步
20.837937 秒
同步(我實在沒想到會耗時這么久...)
650.712683 秒
從結(jié)果來看,在爬取1000條鏈接的場景中,異步爬蟲效率是同步爬蟲的30多倍。

資源消耗相對較小,效率提升卻如此巨大,所以在以后的爬蟲中,我就優(yōu)先考慮異步了。

有興趣的朋友,可以嘗試一下與多線程和多進程的效率對比,請在本貼貼出對比結(jié)果。

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/125892.html

相關文章

  • 關于Python爬蟲種類、法律、輪子的一二三

    摘要:一般用進程池維護,的設為數(shù)量。多線程爬蟲多線程版本可以在單進程下進行異步采集,但線程間的切換開銷也會隨著線程數(shù)的增大而增大。異步協(xié)程爬蟲引入了異步協(xié)程語法。 Welcome to the D-age 對于網(wǎng)絡上的公開數(shù)據(jù),理論上只要由服務端發(fā)送到前端都可以由爬蟲獲取到。但是Data-age時代的到來,數(shù)據(jù)是新的黃金,毫不夸張的說,數(shù)據(jù)是未來的一切?;诮y(tǒng)計學數(shù)學模型的各種人工智能的出現(xiàn)...

    lscho 評論0 收藏0
  • 《Node.js設計模式》基于回調(diào)的異步控制流

    摘要:編寫異步代碼可能是一種不同的體驗,尤其是對異步控制流而言?;卣{(diào)函數(shù)的準則在編寫異步代碼時,要記住的第一個規(guī)則是在定義回調(diào)時不要濫用閉包。為回調(diào)創(chuàng)建命名函數(shù),避免使用閉包,并將中間結(jié)果作為參數(shù)傳遞。 本系列文章為《Node.js Design Patterns Second Edition》的原文翻譯和讀書筆記,在GitHub連載更新,同步翻譯版鏈接。 歡迎關注我的專欄,之后的博文將在專...

    Chiclaim 評論0 收藏0
  • Python爬蟲--高性能的異步爬蟲(五)

    摘要:任務,它是對協(xié)程對象的進一步封裝,包含了任務的各個狀態(tài)。代表將來執(zhí)行或還沒有執(zhí)行的任務,實際上和沒有本質(zhì)區(qū)別。 文章目錄 文章知識點一、異步爬蟲概述二、線程池的基...

    leeon 評論0 收藏0
  • 面向?qū)ο蟮姆植际?em>爬蟲框架XXL-CRAWLER

    摘要:面向?qū)ο蟮姆植际脚老x框架一簡介概述是一個面向?qū)ο蟮姆植际脚老x框架。分布式集群集群方式維護爬蟲爬蟲運行數(shù)據(jù),可通過或定制實現(xiàn)。 《面向?qū)ο蟮姆植际脚老x框架XXL-CRAWLER》 showImg(https://segmentfault.com/img/remote/1460000011842697);showImg(https://segmentfault.com/img/remote...

    anquan 評論0 收藏0
  • Node_模塊

    摘要:當某個執(zhí)行完畢時,將以時間的形式通知執(zhí)行操作的線程,線程執(zhí)行了這個事件的回調(diào)函數(shù)。為了處理異步,線程必須有事件循環(huán),不斷的檢查是否有未處理的時間。這種處理機制,稱為事件環(huán)機制。方面使用第三方模塊。 簡介 V8引擎本身就是用于Chrome瀏覽器的JS解釋部分,但是Ryan Dahl,把V8搬到服務器,用于做服務器的軟件。Node是一個專注于實現(xiàn)高性能Web服務器優(yōu)化的專家,在遇到V8而誕...

    zero 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<