我想分析一個包含多個頁面的網站。Python多處理 - 按需使用工作人員
我不知道頁數。 這是原來的代碼:
next_button=soup.find_all('a',{'class':"btn-page_nav right"})
while next_button:
link=next_button[0]['href']
resp=requests.get('webpage+link)
soup=BeautifulSoup(resp.content)
table=soup.find('table',{'class':'js-searchresults'})
body=table.find('tbody')
rows=body.find_all('tr')
function(rows)
next_button=soup.find_all('a',{'class':"btn-page_nav right"})
它工作正常,function(rows)
是解析每個頁面的一部分的功能。
我想要做的是使用multiprocessing
解析這些頁面。我想過使用3名工人的pool
,以便我可以一次處理3頁,但我無法弄清楚如何實施它。
一種解決方案是這樣的:
rows_list=[]
next_button=soup.find_all('a',{'class':"btn-page_nav right"})
while next_button:
link=next_button[0]['href']
resp=requests.get('webpage+link)
soup=BeautifulSoup(resp.content)
table=soup.find('table',{'class':'js-searchresults'})
body=table.find('tbody')
rows=body.find_all('tr')
rows_list.append(rows)
next_button=soup.find_all('a',{'class':"btn-page_nav right"})
等待程序遍歷所有頁面,然後:
pool=multiprocessing.Pool(processes=4)
pool.map(function,rows_list)
但我不認爲這會提高性能太多了,我希望主進程遍歷頁面,一旦打開頁面,就將其發送給工作人員。 這個怎麼辦?一個虛擬的例子:
pool=multiprocessing.Pool(processes=4)
next_button=soup.find_all('a',{'class':"btn-page_nav right"})
while next_button:
link=next_button[0]['href']
resp=requests.get('webpage+link)
soup=BeautifulSoup(resp.content)
table=soup.find('table',{'class':'js-searchresults'})
body=table.find('tbody')
rows=body.find_all('tr')
**pool.send_to_idle_worker(rows)**
next_button=soup.find_all('a',{'class':"btn-page_nav right"})