<p>你的问题是你的日期时间戳格式错误。如果你看一下错误代码,它会告诉你:</p>
<pre><code>datetime.datetime.fromtimestamp(int(in_date)).strftime('%Y-%m-%d')
</code></pre>
<p>注意到<code>int(in_date)</code>部分了吗?在</p>
<p>它需要unix时间戳。有几种方法可以得到这个,从时间模块或日历模块,或使用箭头。在</p>
^{pr2}$
<p><strong>*更新*</strong>
好的,我修复了数据帧部分。以下是我当前的代码:</p>
<pre><code># Select Tickers and stock history dates
index = {'DJI' : YahooFinancials('^DJI'),
'GSPC' : YahooFinancials('^GSPC'),
'IXIC':YahooFinancials('^IXIC'),
'GDAXI':YahooFinancials('^GDAXI'),
'FTSE':YahooFinancials('^FTSE'),
'HSI':YahooFinancials('^HSI'),
'KS11':YahooFinancials('^KS11'),
'NSEI':YahooFinancials('^NSEI')}
freq = 'daily'
start_date = '1993-06-30'
end_date = '2018-06-30'
# Clean returned stock history data and remove dividend events from price history
daily = {}
for k in index:
tmp = index[k].get_historical_stock_data(start_date, end_date, freq)
if tmp:
daily[k] = tmp['^{}'.format(k)]['prices'] if 'prices' in tmp['^{}'.format(k)] else []
</code></pre>
<p>不幸的是,我不得不修复雅虎模块中的一些问题。对于YahooFinanceTL课程:</p>
<pre><code>@staticmethod
def format_date(in_date, convert_type):
try:
x = int(in_date)
convert_type = 'standard'
except:
convert_type = 'unixstamp'
if convert_type == 'standard':
if in_date < 0:
form_date = datetime.datetime(1970, 1, 1) + datetime.timedelta(seconds=in_date)
else:
form_date = datetime.datetime.fromtimestamp(int(in_date)).strftime('%Y-%m-%d')
else:
split_date = in_date.split('-')
d = date(int(split_date[0]), int(split_date[1]), int(split_date[2]))
form_date = int(time.mktime(d.timetuple()))
return form_date
</code></pre>
<p>以及:</p>
<pre><code> # private static method to scrap data from yahoo finance
@staticmethod
def _scrape_data(url, tech_type, statement_type):
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")
script = soup.find("script", text=re.compile("root.App.main")).text
data = loads(re.search("root.App.main\s+=\s+(\{.*\})", script).group(1))
if tech_type == '' and statement_type != 'history':
stores = data["context"]["dispatcher"]["stores"]["QuoteSummaryStore"]
elif tech_type != '' and statement_type != 'history':
stores = data["context"]["dispatcher"]["stores"]["QuoteSummaryStore"][tech_type]
else:
if "HistoricalPriceStore" in data["context"]["dispatcher"]["stores"] :
stores = data["context"]["dispatcher"]["stores"]["HistoricalPriceStore"]
else:
stores = data["context"]["dispatcher"]["stores"]["QuoteSummaryStore"]
return stores
</code></pre>
<p>您将需要查看<code>daily</code>dict,并重写您的<code>build_data_frame</code>函数,因为您已经在使用字典了,所以现在应该要简单得多。在</p>