Reputation: 255
I am using Python 3.3 on Windows. I am trying to figure out how to download a .csv file from yahoo finance. It is a file for the Historical Prices.
This is the source code where the link is I'm trying to access.
<p>
<a href="http://ichart.finance.yahoo.com/table.csv?s=AAPL&d=1&e=1&f=2014&g=d&a=8&b=7&c=1984&ignore=.csv">
<img src="http://l.yimg.com/a/i/us/fi/02rd/spread.gif" width="16" height="16" alt="" border="0">
<strong>Download to Spreadsheet</strong>
</a>
</p>
And here is the code I wrote to do it.
from urllib.request import urlopen
from bs4 import BeautifulSoup
website = "http://ichart.finance.yahoo.com/table.csv?s=AAPL&d=1&e=1&f=2014&g=d&a=8&b=7&c=1984&ignore=.csv"
html = urlopen(website)
soup = BeautifulSoup(html)
When I ran the code, I was expecting it to start the download and put it into my downloads folder, but it doesn't do anything. It runs and then stops. No csv file shows up in my downloads. So I think I'm missing something else in this code.
Upvotes: 0
Views: 13726
Reputation: 2182
You can do this with just urllib. The following code downloads the .csv file and puts the contents into a string named 'csv'. Then it saves the string to a file:
from urllib import request
# Retrieve the webpage as a string
response = request.urlopen("http://ichart.finance.yahoo.com/table.csv?s=AAPL&d=1&e=1&f=2014&g=d&a=8&b=7&c=1984&ignore=.csv")
csv = response.read()
# Save the string to a file
csvstr = str(csv).strip("b'")
lines = csvstr.split("\\n")
f = open("historical.csv", "w")
for line in lines:
f.write(line + "\n")
f.close()
Upvotes: 2
Reputation: 11396
since you already use BeautifulSoup and urllib:
url = BeautifulSoup(html).find('a')['href']
urllib.urlretrieve(url, '/path/to/downloads/file.csv')
Upvotes: 0