Je cours un programme pour tirer quelques informations de Yahoo! La finance. Il fonctionne très bien comme une boucle For
, mais il prend beaucoup de temps (environ 10 minutes pour 7000 entrées), car il doit traiter chaque request.get(url)
individuellement (ou je me trompe sur le bottlenecker majeur?)Multithreading à Scrap Yahoo Finance
Quoi qu'il en soit, je suis tombé sur multithread comme une solution potentielle. Voilà ce que j'ai essayé:
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)
L'erreur que je reçois est InvalidSchema: No connection adapters were found for '['https://query2.finance.... [url continues]
.
PS. J'ai également lu que l'utilisation de l'approche multithread pour scrapper des sites Web est mauvaise/peut vous bloquer. Would Yahoo! Finances esprit si je tire des données de quelques milliers de tickers à la fois? Rien ne s'est passé quand je les ai fait séquentiellement.
Je rappellerai qu'un [package Python existe déjà] (https://pypi.python.org/pypi/yahoo-finance/1.1.4) sur Pypi pour faire des requêtes à Yahoo! la finance. Cela ne vous aidera pas à faire plus de demandes plus rapidement, mais ce sera beaucoup plus agréable que d'avoir à écrire votre propre logique pour obtenir des valeurs. –
J'ai vu ça! Mais ils n'ont pas de méthodes pour tous les chiffres dont j'ai besoin. –