我正在运行一个程序从Yahoo!中提取一些信息金融。它可以作为For
循环运行良好,但是它需要很长时间(7,000个输入大约需要10分钟),因为它必须单独处理每个request.get(url)
(或者我错误地认为主要的瓶颈?)< / p>
无论如何,我遇到了多线程作为潜在的解决方案。这就是我的尝试:
import requests
import pprint
import threading
with open('MFTop30MinusAFew.txt', 'r') as ins: #input file for tickers
for line in ins:
ticker_array = ins.read().splitlines()
ticker = ticker_array
url_array = []
url_data = []
data_array =[]
for i in ticker:
url = 'https://query2.finance.yahoo.com/v10/finance/quoteSummary/'+i+'?formatted=true&crumb=8ldhetOu7RJ&lang=en-US®ion=US&modules=defaultKeyStatistics%2CfinancialData%2CcalendarEvents&corsDomain=finance.yahoo.com'
url_array.append(url) #loading each complete url at one time
def fetch_data(url):
urlHandler = requests.get(url)
data = urlHandler.json()
data_array.append(data)
pprint.pprint(data_array)
threads = [threading.Thread(target=fetch_data, args=(url,)) for url in url_array]
for thread in threads:
thread.start()
for thread in threads:
thread.join()
fetch_data(url_array)
我得到的错误是InvalidSchema: No connection adapters were found for '['https://query2.finance.... [url continues]
。
PS。我还读到使用多线程方法来废弃网站很糟糕/可能会阻止你。雅虎!如果我一次从几千个代码中提取数据,我会想到财务吗?我按顺序做了什么都没发生。
答案 0 :(得分:2)
如果你仔细查看错误,你会注意到它没有显示一个网址,而是显示你附加的所有网址,用括号括起来。实际上,代码的最后一行实际上是以完整数组作为参数调用方法fetch_data,这没有意义。如果删除最后一行,代码运行正常,并按预期调用线程。