雅虎是获取初步免费数据的最简单选择。eckesicle的答案中描述的链接可以很容易地在python代码中使用,但是您首先需要所有的代码。在此示例中,我将使用纽约证券交易所,但这也可以用于不同的交易所。
我使用此Wiki页面下载了具有以下脚本的所有公司代码(我不是非常有才华的Python专家,如果这段代码效率不高,请您谅解):
import string
import urllib2
from bs4 import BeautifulSoup
global f
def download_page(url):
aurl = urllib2.urlopen(url)
soup = BeautifulSoup(aurl.read())
print url
for row in soup('table')[1]('tr'):
tds = row('td')
if (len(tds) > 0):
f.write(tds[1].string + '\n')
f = open('stock_names.txt', 'w')
url_part1 = 'http://en.wikipedia.org/wiki/Companies_listed_on_the_New_York_Stock_Exchange_'
url = url_part1 + '(0-9)'
download_page(url)
for letter in string.uppercase[:26]:
url_part2 = letter
url = url_part1 + '(' + letter + ')'
download_page(url)
f.close()
为了下载每个股票,我使用了另一个非常相似的脚本:
import string
import urllib2
from bs4 import BeautifulSoup
global f
url_part1 = 'http://ichart.finance.yahoo.com/table.csv?s='
url_part2 = '&d=0&e=28&f=2010&g=d&a=3&b=12&c=1996&ignore=.csv'
print "Starting"
f = open('stock_names.txt', 'r')
file_content = f.readlines()
count = 1;
print "About %d tickers will be downloaded" % len(file_content)
for ticker in file_content:
ticker = ticker.strip()
url = url_part1 + ticker + url_part2
try:
# This will cause exception on a 404
response = urllib2.urlopen(url)
print "Downloading ticker %s (%d out of %d)" % (ticker, count, len(file_content))
count = count + 1
history_file = open('C:\\Users\\Nitay\\Desktop\\Historical Data\\' + ticker + '.csv', 'w')
history_file.write(response.read())
history_file.close()
except Exception, e:
pass
f.close()
请注意,此方法的主要缺点是不同公司可以使用不同的数据-在要求的日期(新列出的日期)中不存在数据的公司将为您提供404页。
还请记住,此方法仅适用于初步数据-如果您真的想测试算法,则应该花点钱并使用CSIData或其他可靠的数据提供商