日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > AI科技大本營(yíng)
[導(dǎo)讀]作者|俊欣來(lái)源?|關(guān)于數(shù)據(jù)分析與可視化就在11月7日晚間,《英雄聯(lián)盟》S11賽季全球總決賽決斗,在冰島拉開(kāi)“帷幕”,同時(shí)面向全球直播。在經(jīng)過(guò)了5個(gè)小時(shí)的鏖戰(zhàn),EDG戰(zhàn)隊(duì)最終以3:2戰(zhàn)勝來(lái)自韓國(guó)LCK賽區(qū)的DK戰(zhàn)隊(duì),獲得俱樂(lè)部隊(duì)史上首座全球總決賽冠軍。奪冠的消息瞬間引爆全網(wǎng),包括小...


作者 | 俊欣


來(lái)源 | 關(guān)于數(shù)據(jù)分析與可視化


就在11月7日晚間,《英雄聯(lián)盟》S11賽季全球總決賽決斗,在冰島拉開(kāi)“帷幕”,同時(shí)面向全球直播。在經(jīng)過(guò)了5個(gè)小時(shí)的鏖戰(zhàn),EDG戰(zhàn)隊(duì)最終以3:2戰(zhàn)勝來(lái)自韓國(guó)LCK賽區(qū)的DK戰(zhàn)隊(duì),獲得俱樂(lè)部隊(duì)史上首座全球總決賽冠軍。


奪冠的消息瞬間引爆全網(wǎng),包括小編的朋友圈也被刷屏了,今天小編就寫(xiě)一篇與之相關(guān)的文章,通過(guò)單線程進(jìn)程以及異步協(xié)程等方法來(lái)抓取英雄聯(lián)盟的皮膚并下載。

傳統(tǒng)數(shù)據(jù)抓取 VS 高性能數(shù)據(jù)抓取

傳統(tǒng)的數(shù)據(jù)抓取都是運(yùn)行在單線程上的,先用獲取到目標(biāo)頁(yè)面中最大的頁(yè)數(shù),然后循環(huán)抓取每個(gè)單頁(yè)數(shù)據(jù)并進(jìn)行解析,按照這樣的思路,會(huì)有大量的時(shí)間都浪費(fèi)在等待請(qǐng)求傳回的數(shù)據(jù)上面,如果在等待第一個(gè)頁(yè)面返回的數(shù)據(jù)時(shí)去請(qǐng)求第二個(gè)頁(yè)面,就能有效地提高效率,下面我們就通過(guò)單線程、多進(jìn)程以及異步協(xié)程的方式分別來(lái)簡(jiǎn)單的實(shí)踐一下。

頁(yè)面分析

目標(biāo)網(wǎng)站:https://lol.qq.com/data/info-heros.shtml官網(wǎng)的界面如圖所示,上面的每一張小圖代表每一個(gè)英雄,我們知道每一個(gè)英雄有多個(gè)皮膚,我們的目標(biāo)就是爬取每一個(gè)英雄的所有皮膚,并且保存在本地;打開(kāi)一個(gè)英雄顯示他所有的皮膚,如下圖所示,我們打開(kāi)瀏覽器里面的開(kāi)發(fā)者工具,查看皮膚數(shù)據(jù)的接口,可以看到皮膚的信息是通過(guò)json的數(shù)據(jù)格式來(lái)進(jìn)行傳輸?shù)模⑶掖娣牌つw的url也是有一定規(guī)律的,和英雄的ID相掛鉤url1 = 'https://game.gtimg.cn/images/lol/act/img/js/hero/1.js'
url2 = 'https://game.gtimg.cn/images/lol/act/img/js/hero/2.js'
url3 = 'https://game.gtimg.cn/images/lol/act/img/js/hero/3.js'
url4 = 'https://game.gtimg.cn/images/lol/act/img/js/hero/4.js'
因此我們也可以自己來(lái)構(gòu)造這個(gè)url格式'https://game.gtimg.cn/images/lol/act/img/js/hero/{}.js'.format(i)

單線程方案

我們先來(lái)看一下單線程的方案def get_page():
page_urls = []
for i in range(1, 10):
url = 'https://game.gtimg.cn/images/lol/act/img/js/hero/{}.js'.format(i)
page_urls.append(url)
return page_urls

# 獲取各英雄皮膚的鏈接
def get_img_urls():
results_list = []
page_urls = get_page()
for page_url in page_urls:
res = requests.get(page_url, headers=headers)
result = res.content.decode('utf-8')
result_dict = json.loads(result)
skins_list = result_dict["skins"]

for skin in skins_list:
hero_dict = {}
hero_dict['name'] = skin["heroName"]
hero_dict['skin_name'] = skin["name"]
if skin["mainImg"] == '':
continue
hero_dict['imgUrl'] = skin["mainImg"]
results_list.append(hero_dict)
time.sleep(2)
return results_list

# 將各種皮膚保存到本地
def save_image(index, img_url):
path = "skin/" img_url["name"]
if not os.path.exists(path):
os.makedirs(path)
response = requests.get(img_url['imgUrl'], headers = headers).content
with open('./skin/' img_url['name'] '/' img_url['skin_name']   str(index) '.jpg', 'wb') as f:
f.write(response)
上面的代碼分別代表的獲取各英雄每個(gè)皮膚的鏈接,然后再將各英雄的皮膚圖片保存到本地,通過(guò)一個(gè)主函數(shù)將上面的步驟都串聯(lián)到一起def main():
img_urls = get_img_urls()
print("總共有{}個(gè)網(wǎng)頁(yè)".format(len(img_urls)))
for index, img_url in enumerate(img_urls):
print("目前正處于第{}個(gè)".format(img_urls.index(img_url)))
save_image(index, img_url)

print("Done")
爬取這幾個(gè)網(wǎng)頁(yè)然后保存到本地的時(shí)間總共是需要43秒的時(shí)間,接下來(lái)我們來(lái)看一下多進(jìn)程的爬取所需要的時(shí)間。

多進(jìn)程的抓取方案

首先來(lái)簡(jiǎn)單的介紹一下進(jìn)程,進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的最小單位,每一個(gè)進(jìn)程都有自己獨(dú)立的地址空間,不同進(jìn)程之間的內(nèi)存空間不共享,進(jìn)程與進(jìn)程之間的通信是由操作系統(tǒng)來(lái)傳遞的,因此通訊效率低,切換開(kāi)銷大。這里我們簡(jiǎn)單的用多進(jìn)程來(lái)抓取一下各個(gè)英雄的皮膚def main():
img_urls = get_img_urls()
print("總共有{}個(gè)網(wǎng)頁(yè)".format(len(img_urls)))
pools = multiprocessing.Pool(len(img_urls))
for index_1, img_url in enumerate(img_urls):
print("目前正處于第{}個(gè)".format(img_urls.index(img_url)))
pools.apply_async(save_image, args=(index_1, img_url, ))

pools.close() # 關(guān)閉進(jìn)程池(pool),使其不在接受新的任務(wù)。
pools.join() # 主進(jìn)程阻塞等待子進(jìn)程的退出, join方法要在close或terminate之后使用
print("Done")
整體下來(lái)需要的時(shí)間是29秒,比上面的單線程要快出許多。

異步協(xié)程的抓取方案

與異步相對(duì)立的則是同步,顧名思義,同步具體指的各個(gè)任務(wù)并不是獨(dú)立進(jìn)行的,而是按照順序交替進(jìn)行下去的,在一個(gè)任務(wù)進(jìn)行完之后得到結(jié)果才進(jìn)行下一個(gè)的任務(wù)。而異步則是各個(gè)任務(wù)可以獨(dú)立的運(yùn)行,一個(gè)任務(wù)的運(yùn)行不受另外一個(gè)任務(wù)的影響。而這里提到的協(xié)程,英文叫做Coroutine,也稱為是微線程,是一種用戶態(tài)的輕量級(jí)線程,擁有自己的寄存器上下文和棧,在進(jìn)行調(diào)度切換時(shí),將寄存器上下文和棧保存到其他地方,在切回來(lái)的時(shí)候恢復(fù)先前保存的寄存器上下文和棧。我們可以利用協(xié)程來(lái)實(shí)現(xiàn)異步操作,比如在發(fā)出請(qǐng)求的時(shí)候,需要等一段時(shí)間才能得到返回的結(jié)果,但其實(shí)這個(gè)等待的時(shí)候程序完全可以干其他許多的事情,在響應(yīng)返回之后再切換回來(lái)繼續(xù)處理,這樣可以充分利用 CPU 和其他資源。我們這里用協(xié)程來(lái)抓取一下各個(gè)英雄的皮膚async def save_image(index, img_url):
path = "skin/" img_url["name"]
if not os.path.exists(path):
os.makedirs(path)
response = requests.get(img_url['imgUrl'], headers = headers).content
with open('./skin/' img_url['name'] '/' img_url['skin_name']   str(index) '.jpg', 'wb') as f:
f.write(response)

def main():
loop = asyncio.get_event_loop()
img_urls = get_img_urls()
print("總共有{}個(gè)網(wǎng)頁(yè)".format(len(img_urls)))
tasks_list = [save_image(index, img_url) for index, img_url in enumerate(img_urls)]
try:
loop.run_until_complete(asyncio.wait(tasks_list))
finally:
loop.close()

print("Done")
一整個(gè)跑下來(lái),大概是需要33秒的時(shí)間,也是比單線程的43秒要快出很多以上便是用單線程、多進(jìn)程以及異步協(xié)程的方式來(lái)優(yōu)化爬蟲(chóng)腳本的性能,感興趣的讀者可以自己照著上面的教程與步驟自己去敲一遍代碼,感謝閱讀。





本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

蘇州2022年10月19日 /美通社/ -- 2022年10月18日,全球光學(xué)及光電技術(shù)領(lǐng)軍者蔡司在蘇州工業(yè)園區(qū)奠基啟動(dòng)"鳳棲"工程建設(shè),這是蔡司在國(guó)內(nèi)首次購(gòu)地自建項(xiàng)目,標(biāo)志著蔡司在中國(guó)本土化進(jìn)程的進(jìn)...

關(guān)鍵字: 光學(xué) 顯微鏡 進(jìn)程 中國(guó)制造

蔡司在蘇州工業(yè)園區(qū)奠基啟動(dòng)"鳳棲"工程建設(shè),這是蔡司在國(guó)內(nèi)首次購(gòu)地自建項(xiàng)目,標(biāo)志著蔡司在中國(guó)本土化進(jìn)程的進(jìn)一步深化與擴(kuò)展。 "鳳棲"工程建成后,蔡司蘇州將成為蔡司在中國(guó)更高規(guī)格的研發(fā)與制造的重要據(jù)點(diǎn),為其工業(yè)質(zhì)量、研究顯...

關(guān)鍵字: 顯微鏡 進(jìn)程

廣東佛山2022年10月19日 /美通社/ -- 空間是人居生活的基礎(chǔ)單元,承載著生存與活動(dòng)的最基本功能。而對(duì)于理想空間的解構(gòu)意義卻在物理性容器之外,體現(xiàn)出人們對(duì)于空間和生活深層關(guān)系的思考,同時(shí)也塑造著人與空間的新型連接...

關(guān)鍵字: 溫度 BSP 智能化 進(jìn)程

助力再生農(nóng)業(yè)轉(zhuǎn)型、溫室氣體減排并改善農(nóng)民生計(jì)  北京2022年10月13日 /美通社/ -- 雀巢咖啡作為雀巢集團(tuán)最大且廣受全球消費(fèi)者喜愛(ài)的咖啡品牌,近期推出了使咖啡種植更加可持續(xù)的延展計(jì)劃:雀巢咖啡2030...

關(guān)鍵字: 可持續(xù)發(fā)展 BSP 路線圖 進(jìn)程

(全球TMT2022年10月12日訊)Exyte已完成對(duì)美國(guó)廢氣凈化技術(shù)專家Airgard Inc.的收購(gòu)。Airgard成立于1988年,總部位于加利福尼亞州的Milpitas,是 "濕式" 洗滌器開(kāi)發(fā)和制造領(lǐng)域的領(lǐng)...

關(guān)鍵字: TE AIR 進(jìn)程 半導(dǎo)體行業(yè)

大連2022年9月30日 /美通社/ -- 近日,國(guó)際獨(dú)立第三方檢測(cè)、檢驗(yàn)和認(rèn)證機(jī)構(gòu)德國(guó)萊茵TUV(簡(jiǎn)稱"TUV萊茵")大連分公司總經(jīng)理張孝寬受邀出席了由...

關(guān)鍵字: 能源管理 ISO 控制 進(jìn)程

佛山2022年9月23日 /美通社/ -- 近日,由恒潔衛(wèi)浴集團(tuán)有限公司(以下簡(jiǎn)稱:恒潔)發(fā)起的"這空間很中國(guó)"公共空間改造計(jì)劃正式拉開(kāi)序幕,聯(lián)合權(quán)威黨媒及新華書(shū)店,以重慶、北京等城市為起點(diǎn),陸續(xù)在全...

關(guān)鍵字: 中國(guó)制造 進(jìn)程 防護(hù) 色環(huán)

(全球TMT2022年9月22日訊)建筑項(xiàng)目管理軟件領(lǐng)域企業(yè)InEight Inc.宣布了最新的軟件創(chuàng)新,包括范圍、設(shè)計(jì)和資源管理方面的新流程標(biāo)準(zhǔn)化,以及新的進(jìn)展跟蹤功能和創(chuàng)建基準(zhǔn)驗(yàn)證型進(jìn)程預(yù)估和時(shí)間表的能力。該更新還...

關(guān)鍵字: 軟件 進(jìn)程 應(yīng)用程序 模板

InEight專注于軟件創(chuàng)新的標(biāo)準(zhǔn)化和基準(zhǔn)更新,從而提高了效率,增加了項(xiàng)目信心 InEight建筑項(xiàng)目管理平臺(tái)的最新發(fā)展引入了新的設(shè)計(jì)管理和基準(zhǔn)實(shí)踐,提高了各個(gè)項(xiàng)目之間的一...

關(guān)鍵字: 軟件 應(yīng)用程序 進(jìn)程 移動(dòng)應(yīng)用

"襯"出新我,再續(xù)傳奇 沈陽(yáng)2022年9月8日 /美通社/ -- 9月6日,GANT沈陽(yáng)K11全新門(mén)店正式啟幕。此次GANT以新店開(kāi)幕為契機(jī),回顧品牌標(biāo)志性襯衫單品的誕生與歷史,并演繹經(jīng)歷沉淀后的迭...

關(guān)鍵字: GAN 行業(yè)標(biāo)準(zhǔn) 進(jìn)程 微信

AI科技大本營(yíng)

111 篇文章

關(guān)注

發(fā)布文章

編輯精選

技術(shù)子站

關(guān)閉