多线程抓取雅虎财经
Multithreading to Scrape Yahoo Finance
我是 运行 一个从 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。我还读到过使用多线程方法来抓取网站 bad/can 会让你被屏蔽。雅虎会吗?如果我一次从几千个代码中提取数据,财务会介意吗?当我按顺序执行时没有任何反应。
如果仔细查看错误,您会发现它没有显示一个 url,而是显示您附加的所有 url,并用方括号括起来。事实上,您代码的最后一行实际上使用完整数组作为参数调用您的方法 fetch_data ,这是没有意义的。如果您删除最后一行,代码运行得很好,您的线程将按预期调用。
我是 运行 一个从 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。我还读到过使用多线程方法来抓取网站 bad/can 会让你被屏蔽。雅虎会吗?如果我一次从几千个代码中提取数据,财务会介意吗?当我按顺序执行时没有任何反应。
如果仔细查看错误,您会发现它没有显示一个 url,而是显示您附加的所有 url,并用方括号括起来。事实上,您代码的最后一行实际上使用完整数组作为参数调用您的方法 fetch_data ,这是没有意义的。如果您删除最后一行,代码运行得很好,您的线程将按预期调用。