【发布时间】:2021-09-29 03:59:13
【问题描述】:
我正在使用 python 请求库从网站 (https://www.nseindia.com/) 获取 JSON 数据。该网站仅在提供正确 cookie 的情况下提供数据。所以我使用 selenium webdriver 来获取 cookie,然后获取 850 种不同股票的数据。
现在,我的代码是这样的,如果 cookie 错误,那么 selenium 应该再次打开并获取新的 cookie 值。但问题是,当我使用 concurrent.futures 时,任务非常快(由于异步性),它会为每个符号打开新的驱动程序,直到找不到新的 cookie。我的代码如下:
--初步获取cookies
cookie_dict = get_cookies()
for cookie in cookie_dict:
if cookie == "bm_sv" or cookie == "nsit" or cookie == "nseappid":
session.cookies.set(cookie,cookie_dict[cookie])
--线程池执行器中使用该函数
def final(u):
try:
data = session.get(u,headers = headers).json()
print(data['data'][0]['CH_SYMBOL'])
list_done.append(data['data'][0]['CH_SYMBOL'])
except:
print("Error")
cookie_dict = get_cookies()
for cookie in cookie_dict:
if cookie == "bm_sv" or cookie == "nsit" or cookie == "nseappid":
session.cookies.set(cookie,cookie_dict[cookie])
data = session.get(u,headers = headers).json()
print(data['data'][0]['CH_SYMBOL'])
list_done.append(data['data'][0]['CH_SYMBOL'])
如您所见,如果遇到异常,它应该获取新的 cookie。但正如我之前提到的,其他股票的期货将继续运行,并且会遇到例外情况,直到找不到新的 cookie。
with concurrent.futures.ThreadPoolExecutor(max_workers = 5) as executor:
executor.map(final,urls)
有没有一种方法可以更改我的代码,或者一些由 futures 内置的设施,这样我就可以停止它,直到我没有获得新的 cookie 并只有在附加了新的 cookie 时才继续运行?
【问题讨论】:
标签: python json python-requests threadpoolexecutor concurrent.futures