pandasfinanceyahoo-financegoogle-financestockquotes

Download history stock prices automatically from yahoo finance in python


Is there a way to automatically download historical prices of stocks from yahoo finance or google finance (csv format)? Preferably in Python.


Solution

  • Short answer: Yes. Use Python's urllib to pull the historical data pages for the stocks you want. Go with Yahoo! Finance; Google is both less reliable, has less data coverage, and is more restrictive in how you can use it once you have it. Also, I believe Google specifically prohibits you from scraping the data in their ToS.

    Longer answer: This is the script I use to pull all the historical data on a particular company. It pulls the historical data page for a particular ticker symbol, then saves it to a csv file named by that symbol. You'll have to provide your own list of ticker symbols that you want to pull.

    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()