多线程解密雅虎财务

时间:2016-09-06 22:59:27

标签: python multithreading yahoo-finance

我正在运行一个程序从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&region=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。我还读到使用多线程方法来废弃网站很糟糕/可能会阻止你。雅虎!如果我一次从几千个代码中提取数据,我会想到财务吗?我按顺序做了什么都没发生。

1 个答案:

答案 0 :(得分:2)

如果你仔细查看错误,你会注意到它没有显示一个网址,而是显示你附加的所有网址,用括号括起来。实际上,代码的最后一行实际上是以完整数组作为参数调用方法fetch_data,这没有意义。如果删除最后一行,代码运行正常,并按预期调用线程。