[英]Python web scraper by using Selenium and Multiprocessing
我有以下功能。它以鏈接作為參數,並在最后給出我需要的數據(base_list)
def extract_BS(link):
base_list = []
try:
browser = webdriver.Firefox()
browser.get(link)
print('Processing..' + link)
respData = browser.page_source
soup = bs.BeautifulSoup(respData, 'html.parser')
browser.quit()
shipping_options = soup.find("div", class_ = "modal_shipping_con").find_all("input", class_="inputChangePrice")
base_list.append(shipping_options)
except Exception as e:
print(urls)
print('Exception:',e)
pass
return base_list
但是,我的網址列表大約為1000,因此單獨進行處理會花費太長時間。 我發現了這個有關多處理的博客 ,我正在嘗試對其進行調整
我使用多線程的其他代碼如下
with Pool(4) as p:
records = p.map(extract_BS,urls)
p.terminate()
p.join()
但是,當我運行它時,出現以下錯誤。
MaybeEncodingError: Error sending result:
Reason: 'RecursionError('maximum recursion depth exceeded in comparison',)'
當我運行腳本時,會彈出4個窗口,而網絡爬蟲會執行此操作,但問題似乎出在“ records = p.map(extract_BS,urls)”。 我的函數輸出一個列表,我想將其存儲在“結果”中,但是由於某種原因,它不起作用。
任何建議/幫助/觀察非常感謝,謝謝
您需要放置
if __name__ == "__main__":
之前使用Pool(4)作為p來防止在每個池中創建一個導致遞歸錯誤的池。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.