雅虎是获得初步免费数据的最简单选择。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 或其他人这样的可信数据供应商