多執行緒池——爬取新發地300頁菜價
阿新 • • 發佈:2022-05-06
#執行緒池一次性開闢一些執行緒,使用者給執行緒提交任務,執行緒任務的呼叫交給執行緒池來完成 # # from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor #執行緒池和程序池 # # def fn(name): # for i in range(1000): # print(name,i) # # if __name__ == '__main__': # #建立執行緒池 # with ThreadPoolExecutor(50) as t: # for i in range(100):# t.submit(fn,name=f"執行緒{i}") # #等待執行緒名完畢,才繼續執行 # print("over") #思路 #1,如何提取單個頁面的資料 #2.上執行緒池,多個頁面同時抓取 import csv import requests from concurrent.futures import ThreadPoolExecutor f=open("菜價.csv",mode="w",encoding="utf-8",newline='') csvwriter=csv.writer(f) def down_one_page(url): resp=requests.get(url) for i in range(20): list=[] prodName=resp.json()["list"][i]['prodName'] avgPrice=resp.json()["list"][i]['avgPrice'] place=resp.json()["list"][i]['place'] list.append(prodName) list.append(avgPrice) list.append(place)print(list) csvwriter.writerow(list) if __name__ == '__main__': #執行緒池 down_one_page("http://www.xinfadi.com.cn/getPriceData.html?current=1") with ThreadPoolExecutor(50) as t: for i in range(200): #爬取200頁資料 t.submit(down_one_page,f"http://www.xinfadi.com.cn/getPriceData.html?current={i}") print("下載完畢")
多執行緒爬取新發地300頁菜價,速度得到很大的提升