背景:爬取豆瓣電影top250的資訊
使用執行緒池
import refrom 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 asyncioimport 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是全域性直譯器鎖,可以控制同一時刻只有乙個執行緒能夠執行,這樣在跑多執行緒的情況下,只有...