2012-09-14 18 views
38

Gibt es eine Möglichkeit, automatisch herunterladen historische Preise von Aktien aus Yahoo Finance oder Google Finanzen (CSV-Format)? Vorzugsweise in Python.Laden Sie Geschichte Aktienkurse automatisch von Yahoo Finanzen in Python

+0

check out http://scrape-google-finance.compunect.com/ es ist eine ziemlich neue Open-Source-PHP-Scraper für Google Finanzen. Es ist kostenlos zu verwenden/ändern und Sie können alle Aktienkurse und alle Unternehmen von Google herunterladen. Sollte nicht zu schwierig sein, daraus zu lernen und dasselbe in Python zu schreiben. – John

Antwort

34

Kurze Antwort: Ja. Verwenden Sie Pythons urllib, um die historischen Datenseiten für die gewünschten Bestände abzurufen. Geh mit Yahoo! Finanzen; Google ist weniger zuverlässig, hat weniger Datenabdeckung und ist restriktiver in der Art und Weise, wie Sie es verwenden können, sobald Sie es haben. Außerdem glaube ich, dass Google Ihnen ausdrücklich verbietet, die Daten in ihren ToS zu scrappen.

Längere Antwort: Dies ist das Skript, das ich verwende, um alle historischen Daten zu einer bestimmten Firma zu ziehen. Er ruft die Verlaufsdatenseite für ein bestimmtes Tickersymbol ab und speichert sie in einer CSV-Datei, die mit diesem Symbol benannt ist. Sie müssen Ihre eigene Liste der Ticker-Symbole angeben, die Sie ziehen möchten.

import urllib 

base_url = "http://ichart.finance.yahoo.com/table.csv?s=" 
def make_url(ticker_symbol): 
    return base_url + ticker_symbol 

output_path = "C:/path/to/output/directory" 
def make_filename(ticker_symbol, directory="S&P"): 
    return output_path + "/" + directory + "/" + ticker_symbol + ".csv" 

def pull_historical_data(ticker_symbol, directory="S&P"): 
    try: 
     urllib.urlretrieve(make_url(ticker_symbol), make_filename(ticker_symbol, directory)) 
    except urllib.ContentTooShortError as e: 
     outfile = open(make_filename(ticker_symbol, directory), "w") 
     outfile.write(e.content) 
     outfile.close() 
92

Wenn Sie gehen in Python mit einem solchen Zeitreihen arbeiten, ist pandas unverzichtbar. Und hier sind die guten Nachrichten: Es kommt mit einem historischen Daten Downloader für Yahoo: pandas.io.data.DataReader.

from pandas.io.data import DataReader 
from datetime import datetime 

ibm = DataReader('IBM', 'yahoo', datetime(2000, 1, 1), datetime(2012, 1, 1)) 
print(ibm['Adj Close']) 

Here's an example from the pandas documentation.

Update für Pandas> = 0,19:

Das pandas.io.data Modul von pandas>=0.19 weiter entfernt wurde. Stattdessen sollten Sie das separate pandas-datareader package verwenden. Installieren Sie mit:

pip install pandas-datareader 

Und dann können Sie tun dies in Python:

import pandas_datareader as pdr 
from datetime import datetime 

ibm = pdr.get_data_yahoo(symbols='IBM', start=datetime(2000, 1, 1), end=datetime(2012, 1, 1)) 
print(ibm['Adj Close']) 

Downloading from Google Finance is also supported.

There's more in the documentation of pandas-datareader.

+2

Wenn ich es versuche, funktionieren die Importe gut, aber wenn ich die 'goog' Zeile anrufe, erhalte ich einen Fehler: "IOError: nach 3 Versuchen gab Yahoo keine 200 für URL zurück 'http://ichart.finance.yahoo .com/table.csv? s = GOOG & a = 0 und b = 1 & c = 2000 & d = 0 & e = 1 & f = 2012 & g = d & ignore = .csv '"Wie könnte das behoben werden? – Cleb

+0

Wie Cleb. 200 Statuscode nicht zurückgegeben – bluerubez

+0

@Cleb Scheint zu sein, weil 'GOOG' nicht von der API akzeptiert wird (verstehe nicht, warum, nach dem Verschieben in Alphabet GOOG Ticker wurde beibehalten). Funktioniert gut für 'GOOGL' und verschiedene andere Symbole. Beispiel nur für den Fall angepasst. –

10

Erweiterung @Def_Os's Antwort mit einer aktuellen Demo ...

Wie @Def_Os schon gesagt hat - mit Pandas Datareader macht diese Aufgabe einen echten Spaß

In [12]: from pandas_datareader import data 

alle verfügbaren historische Daten für AAPL von 1980-01-01

#In [13]: aapl = data.DataReader('AAPL', 'yahoo', '1980-01-01') 

# yahoo api is inconsistent for getting historical data, please use google instead. 
In [13]: aapl = data.DataReader('AAPL', 'google', '1980-01-01') 

ersten 5 Reihen

In [14]: aapl.head() 
Out[14]: 
       Open  High  Low Close  Volume Adj Close 
Date 
1980-12-12 28.750000 28.875000 28.750 28.750 117258400 0.431358 
1980-12-15 27.375001 27.375001 27.250 27.250 43971200 0.408852 
1980-12-16 25.375000 25.375000 25.250 25.250 26432000 0.378845 
1980-12-17 25.875000 25.999999 25.875 25.875 21610400 0.388222 
1980-12-18 26.625000 26.750000 26.625 26.625 18362400 0.399475 

letzte 5 Zeilen

In [15]: aapl.tail() 
Out[15]: 
       Open  High  Low  Close Volume Adj Close 
Date 
2016-06-07 99.250000 99.870003 98.959999 99.029999 22366400 99.029999 
2016-06-08 99.019997 99.559998 98.680000 98.940002 20812700 98.940002 
2016-06-09 98.500000 99.989998 98.459999 99.650002 26419600 99.650002 
2016-06-10 98.529999 99.349998 98.480003 98.830002 31462100 98.830002 
2016-06-13 98.690002 99.120003 97.099998 97.339996 37612900 97.339996 
Start ziehen

speichern alle Daten als CSV

In [16]: aapl.to_csv('d:/temp/aapl_data.csv') 

d file:/temp/aapl_data.csv - 5 erste Reihen

Date,Open,High,Low,Close,Volume,Adj Close 
1980-12-12,28.75,28.875,28.75,28.75,117258400,0.431358 
1980-12-15,27.375001,27.375001,27.25,27.25,43971200,0.408852 
1980-12-16,25.375,25.375,25.25,25.25,26432000,0.378845 
1980-12-17,25.875,25.999999,25.875,25.875,21610400,0.38822199999999996 
1980-12-18,26.625,26.75,26.625,26.625,18362400,0.399475 
... 
4

Es gibt bereits eine Bibliothek in Python yahoo_finance genannt so dass Sie die Bibliothek herunterladen müssen zuerst die folgende Befehlszeile:

sudo pip install yahoo_finance 

Dann, wenn Sie installiert haben die yahoo_finance Bibliothek, hier ist ein Beispielcode, der die benötigten Daten von Yahoo Finance wird herunterladen:

#!/usr/bin/python 
import yahoo_finance 
import pandas as pd 

symbol = yahoo_finance.Share("GOOG") 
google_data = symbol.get_historical("1999-01-01", "2016-06-30") 
google_df = pd.DataFrame(google_data) 

# Output data into CSV 
google_df.to_csv("/home/username/google_stock_data.csv") 

Dies sollte es tun. Lass mich wissen ob es funktioniert.

+0

Nur neugierig - welchen Vorteil bietet yahoo-finance über pandas_datareader (oder umgekehrt)? – Mathematician

+0

Damals war das die einzige Bibliothek, die ich im Zusammenhang mit Yahoo Finance Stock Prices finden konnte. Es scheint jedoch nicht mehr zu funktionieren. – Naufal

+0

Bestätigt - 21/02/2018 - 'yahoo_finance' funktioniert nicht mehr. – 3kstc