Download Stock Prices

Goal: Download stock price data

Data source: Yahoo Finance

The program recipe below is written in python.

Import necessary libraries. If requests modules is not already present, install that package using: "pip install requests"

import requests, csv
from datetime import datetime

Determine the download url.

def get_link(symbol, start, end = datetime.today()):
    download_url = "http://chart.finance.yahoo.com/table.csv?s={0}&a={1}&b={2}&c={3}&d={4}&e={5}&f={6}&g=d&ignore=.csv"
    if type(start) is str:
        start = datetime.strptime(start, "%Y-%m-%d")
        
    if type(end) is str:
        end = datetime.strptime(end, "%Y-%m-%d")
    
    return download_url.format(symbol, start.day, start.month, start.year, end.day, end.month, end.year)

Load stock symbols. I already save the stock symbols in a csv file. The file is attached below. Update the location of the file in the code below.

with open("/data/S&P500/S&P500.csv") as f:
    csv_reader = csv.reader(f)
    stocks = [r for r in csv_reader][1:]

symbols = [stock[0] for stock in stocks]

Download stock prices for each of S&P500 stocks since the Jan 01, 2016. Update the directory where you want to store the csv files.

errors = []
for i, symbol in enumerate(symbols):
    link = get_link(symbol, "2016-01-01")
    res = requests.get(link)
    print(i, symbol, link, res.status_code)
    if res.status_code == 200:
        output_file_name = "/data/S&P500/prices/{0}.csv".format(symbol)
        with open(output_file_name, "w") as f:
            f.write(res.text)
    else:
        errors.append(symbol)
print("Errors", errors)