【发布时间】:2017-01-14 12:00:16
【问题描述】:
我正在运行一个程序来从 Yahoo! 中提取一些信息!金融。它作为For 循环运行良好,但是需要很长时间(7,000 个输入大约需要 10 分钟),因为它必须单独处理每个request.get(url)(或者我是否误认为主要瓶颈?)
无论如何,我发现多线程是一种潜在的解决方案。这是我尝试过的:
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。我还读到使用多线程方法来抓取网站是不好的/可能会让你被阻止。雅虎会!如果我一次从几千个代码中提取数据,财务介意吗?当我按顺序执行它们时,什么也没发生。
【问题讨论】:
-
我会指出 Pypi 上的一个非常好的 Python package already exists 用于向 Yahoo! 发出请求金融。它不会帮助更快地发出更多请求,但它比需要编写自己的获取值的逻辑要好得多。
-
我见过这个!但是他们没有我需要的所有数字的方法。
标签: python multithreading yahoo-finance