python爬蟲 使用執行緒池與使用協程的例項

2022-09-22 02:57:10 字數 1947 閱讀 9927

背景:爬取豆瓣電影top250的資訊

使用執行緒池

import re

from concurrent.futures import threadpoolexecutor

import requests

#獲取豆瓣電影top250電影名字、導演、評分、評價人數

def getdoubanrource(url):

header =

res=requests.get(url,headers=header)

#獲取頁面源**

pagesource = res.text

#預加熱正規表示式物件

obj=re.compile(r'(?p.*?).*?\s*(?p.*?)'

r' .*?(?p.*?).*?(?p.*?)評價',re.s)

reptile_res=obj.finditer(pagesource)

with open("d:\dir_ytj\\dome1.csv",mode="a") as f:

for item in reptile_res :

filmname=item.group("filmname")

director = item.group("director")

score = item.group("score")

person = item.group("person")

f.write(f",,,\n")

print(url,"收取完畢")

if __name__ == '__main__':

with threadpoolexecutor(10) as t:

for i in range(10):

t.submit(getdoubanrource,f"")

print("完成全部資訊收錄")

使用協程

import asyncio

import sys,io

import re

from concurrent.futures import threadpoolexecutor

import requests

#獲取豆瓣電影top250電影名字、導演、評分、評價人數

async def writecsv(filmname,director,score,person):

with open("d:\dir_ytj\\dome2.csv", mode="a") as f:

f.write(f",,,\n")

async def getdoubanrource(url):

header =

res=requests.get(url,headers=header)

#獲取頁面源**

pagesource = res.text

#預加熱正規表示式物件

obj=re.compile(r'(?p.*?).*?\s*(?p.*?)'

r' .*?(?p.*?).*?(?p.*?)評價',re.s)

reptile_res=obj.finditer(pagesource)

tasks=

for item in reptile_res :

filmname=item.group("filmname")

director = item.group("director")

score = item.group("score")

person = item.group("person")

await asyncio.wait(tasks)

if __name__ == '__main__':

print("正在收集網頁資訊......")

for i in range(10):

asyncio.run(getdoubanrource(f""))

print("收集完成")

Python使用多執行緒(附 爬蟲使用的執行緒池)

使用的庫 python 3.threading 較高階,常用 thread python2.中叫 thread 偏底層 python 2.thread 實現多執行緒 python3.6,使用threading庫 1 函式實現 第一種 通過函式建立執行緒 def 函式a pass 獲得乙個執行緒物件。...

python爬蟲學習(二十)非同步爬蟲 執行緒池

import time 使用單執行緒序列的方式執行 def get page str time.sleep 2 name list xiaozi aa bb cc start time time.time for i in range len name list get page name list...

python 執行緒池與程序池

參考文件 為實現程式併發執行和資源共享,提高程式效率,需要進行多執行緒以及多程序開發。在具體介紹之前,需要了解gil.gil是實現python直譯器 cpython 時引入的乙個概念,不是python特性。gil是全域性直譯器鎖,可以控制同一時刻只有乙個執行緒能夠執行,這樣在跑多執行緒的情況下,只有...