我有以下函数。它将一个链接作为参数,并在最后给我提供我需要的数据(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,因此单独执行它们需要很长时间。我在多处理上找到this blog,我试图调整
我使用多线程的其他代码如下
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个窗口弹出,webscraper完成它的工作,但问题似乎是'records = p.map(extract_BS,urls)'。我的函数输出一个列表,我想将其存储在“结果”中,但由于某种原因,这不起作用。
非常感谢任何建议/帮助/观察,谢谢
答案 0 :(得分:0)
你需要放置
if __name__ == "__main__":
之前使用Pool(4)作为p以防止在每个池中创建导致递归错误的池。