2012-09-14 30 views
38

में याहू वित्त से स्वचालित रूप से इतिहास स्टॉक की कीमतें डाउनलोड करें क्या याहू वित्त या Google वित्त (सीएसवी प्रारूप) से स्टॉक की ऐतिहासिक कीमतों को स्वचालित रूप से डाउनलोड करने का कोई तरीका है? अधिमानतः पायथन में।पाइथन

+0

http://scrape-google-finance.compunect.com/ यह Google वित्त के लिए एक नया ओपन सोर्स PHP स्क्रैपर है। यह उपयोग/संशोधित करने के लिए स्वतंत्र है और आप सभी स्टॉक कीमतों और Google की सभी कंपनियों को डाउनलोड कर सकते हैं। इससे सीखना बहुत मुश्किल नहीं होना चाहिए और इसे अजगर में लिखना मुश्किल नहीं होना चाहिए। – John

उत्तर

34

संक्षिप्त उत्तर: हां। अपने इच्छित स्टॉक के लिए ऐतिहासिक डेटा पेज खींचने के लिए पाइथन के urllib का उपयोग करें। याहू के साथ जाओ! वित्त; Google दोनों विश्वसनीय हैं, कम डेटा कवरेज है, और यह आपके पास एक बार होने के बाद इसका उपयोग करने में अधिक प्रतिबंधक है। साथ ही, मेरा मानना ​​है कि Google विशेष रूप से आपको अपने TOS में डेटा को स्क्रैप करने से रोकता है।

लंबा उत्तर: यह वह स्क्रिप्ट है जिसका उपयोग मैं किसी विशेष कंपनी पर सभी ऐतिहासिक डेटा खींचने के लिए करता हूं। यह एक विशेष टिकर प्रतीक के लिए ऐतिहासिक डेटा पेज खींचता है, फिर उसे उस प्रतीक द्वारा नामित एक सीएसवी फ़ाइल में सहेजता है। आपको अपनी टिकर प्रतीकों की अपनी सूची प्रदान करनी होगी जिन्हें आप खींचना चाहते हैं।

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

जब आप अजगर में इस तरह के समय श्रृंखला के साथ काम करने जा रहे हैं, pandas अपरिहार्य है। और यहां अच्छी खबर है: यह याहू के लिए ऐतिहासिक डेटा डाउनलोडर के साथ आता है: pandas.io.data.DataReader

pandas.io.data मॉड्यूल pandas>=0.19 के बाद से हटा दिया गया है:

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.

पांडा> = 0.19 के लिए अद्यतन। इसके बजाय, आपको अलग pandas-datareader package का उपयोग करना चाहिए। साथ स्थापित करें:

pip install pandas-datareader 

और फिर आप अजगर में ऐसा कर सकते हैं:

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

जब मैं इसे आज़माता हूं, तो आयात ठीक काम करता है लेकिन जब मैं 'गूग' लाइन कहता हूं तो मुझे एक त्रुटि मिलती है: "IOError: 3 कोशिशों के बाद, याहू ने यूआरएल के लिए 200 वापस नहीं किया 'http://ichart.finance.yahoo .com/table.csv? s = GOOG और a = 0 और b = 1 और c = 2000 और d = 0 और e = 1 और f = 2012 और g = d और अनदेखा = .csv '"यह कैसे ठीक किया जा सकता है? – Cleb

+0

क्लेब के समान। 200 स्थिति कोड वापस नहीं आया – bluerubez

+0

@ क्लेब ऐसा लगता है क्योंकि एपीआई द्वारा 'GOOG' स्वीकार नहीं किया जाता है (समझ में नहीं आता क्यों, वर्णमाला GOOG टिकर पर जाने के बाद क्यों) रखा गया था। 'GOOGL' और कई अन्य प्रतीकों के लिए ठीक काम करता है। उदाहरण के मामले में समायोजित उदाहरण। –

10

एक वास्तविक डेमो के साथ @Def_Os's जवाब विस्तार ...

जैसा कि @Def_Os पहले ही कह चुका है - 01 का उपयोग करइस कार्य पिछले 5 पंक्तियों

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 

#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') 

पहले 5 पंक्तियों

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 

से शुरू एक असली मज़ा

In [12]: from pandas_datareader import data 

AAPL के लिए सभी उपलब्ध ऐतिहासिक डेटा खींच बनाता है

बचाने फाइल सीएसवी के रूप में सभी डेटा

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

घ:/अस्थायी/aapl_data।सीएसवी - 5 पहली पंक्तियों

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

वहां पहले से ही एक पुस्तकालय अजगर yahoo_finance बुलाया ताकि आप पहले पुस्तकालय डाउनलोड करने के लिए निम्न आदेश लाइन का उपयोग की आवश्यकता होगी है:

sudo pip install yahoo_finance 

फिर एक बार आप स्थापित किया है

#!/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") 

यह करना चाहिए: yahoo_finance पुस्तकालय, यहां जाने वाले डेटा को याहू वित्त की जरूरत है डाउनलोड करेगा एक नमूना कोड है। अगर यह काम करता है तो मुझे बताएं।

+0

बस उत्सुक - याहू-फाइनेंस pandas_datareader (या इसके विपरीत) पर क्या लाभ प्रदान करता है? – Mathematician

+0

उस समय एकमात्र लाइब्रेरी थी जिसे मैं याहू फाइनेंस स्टॉक मूल्यों को खींचने के संबंध में पा सकता था। हालांकि, यह अब और काम नहीं कर रहा प्रतीत होता है। – Naufal

+0

पुष्टि - 21/02/2018 - 'yahoo_finance' अब काम नहीं करता है। – 3kstc