我使用openpyxl
库从工作表中读取不同的代码名,然后在website中使用这些代码生成结果,最后将结果写回位于相关单元格中代码旁边的同一工作表
当我运行脚本而不在其中实现多处理时,我发现它工作得完美无缺
但是,当我使用这个库concurrent.futures
时,我不知道如何将结果写回工作表的相关单元格中
我目前的尝试:
import requests
from openpyxl import load_workbook
import concurrent.futures as futures
wb = load_workbook('Screener.xlsx')
ws = wb['Screener-1']
link = 'https://backend.otcmarkets.com/otcapi/company/profile/full/{}?'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36',
}
params = {
'symbol': ''
}
def get_info(ticker):
target_link = link.format(ticker)
params['symbol'] = ticker
r = requests.get(target_link,params,headers=headers)
try:
address = r.json()['address']
except (AttributeError,KeyError,IndexError):
address = ""
try:
website = r.json()['website']
except (AttributeError,KeyError,IndexError):
website = ""
return address,website
if __name__ == '__main__':
ticker_list = []
for row in range(2, ws.max_row + 1):
if ws.cell(row=row,column=1).value==None:break
ticker = ws.cell(row=row,column=1).value
ticker_list.append(ticker)
with futures.ThreadPoolExecutor(max_workers=6) as executor:
future_to_url = {executor.submit(get_info, ticker): ticker for ticker in ticker_list}
for future in futures.as_completed(future_to_url):
address,website = future.result()[0],future.result()[1]
print(address,website)
# ws.cell(row=row, column=2).value = '{}'.format(address)
# ws.cell(row=row, column=3).value = '{}'.format(website)
# wb.save('Screener.xlsx')
您的测试有几个提示:
tickers = ['URBT','TPRP','CRBO','PVSP','TSPG','VMHG','MRTI','VTMC','TORM','SORT']
How can I write the results back to the same worksheet while doing reverse search using concurrent.futures?
如果您想知道我试图将数据写入的确切位置,这就是the worksheet的样子
既然您已经在使用}{}
openpyxl
,我建议您使用pandas
,因为您可能会发现使用工作簿更容易一些openpyxl
权力{假设您有一个文件
Screener.xlsx
,其中有Symbol
列,如下所示:您可以获取丢失的数据并更新工作簿
以下是方法:
要获得此信息:
编辑:
这里有一种纯的
pandas
方法,不需要先对刮取的数据进行排序相关问题 更多 >
编程相关推荐