【发布时间】:2021-07-29 04:16:49
【问题描述】:
我有一个要使用 selenium 抓取的页面列表
假设网站是 example.com/1...N(最大未知大小)
from concurrent.futures import ThreadPoolExecutor, as_completed
from webdriver_manager.chrome import ChromeDriverManager
def crawl_example(page):
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get(f"example.com/{page}")
# Do some processing
result = "Fetched data"
return result
N_THREAD = 10
MAX_SIZE = 100
with ThreadPoolExecutor(N_THREAD) as ex:
futures = [ex.submit(crawl_example, page) for page in range(MAX_SIZE)]
设置 MAX_SIZE 在 N 之后调用不必要的请求,所以我想找到一个更好的解决方案。 我只能考虑创建一个全局变量(is_done)或向函数添加另一个参数。
解决上述问题最pythonic的方法是什么?
【问题讨论】:
-
您要调整
MAX_SIZE运行时间吗?就像你从函数crawl_example得到 404 然后你调整 max_size 或退出执行程序?有没有办法在启动 executor 之前找到 N? -
是的,我想在运行时调整 MAX_SIZE。除非我对 MAX_SIZE 进行一些二分搜索,否则在爬行之前我找不到 N。
标签: python multithreading selenium web-scraping web-crawler