我试图使用BeautifulSoup with Python解析雅虎财务的各种股票的历史股票价格表。这是代码:
import requests
import pandas as pd
import urllib
from bs4 import BeautifulSoup
tickers = ['HSBA.L', 'RDSA.L', 'RIO.L', 'BP.L', 'GSK.L', 'DGE.L', 'AZN.L', 'VOD.L', 'GLEN.L', 'ULVR.L']
url = 'https://uk.finance.yahoo.com/quote/HSBA.L/history?period1=1478647619&period2=1510183619&interval=1d&filter=history&frequency=1d'
request = requests.get(url)
soup = BeautifulSoup(request.text, 'lxml')
table = soup.find_all('table')[0]
n_rows = 0
n_columns = 0
column_name = []
for row in table.find_all('tr'):
data = row.find_all('td')
if len(data) > 0:
n_rows += 1
if n_columns == 0:
n_columns = len(data)
headers = row.find_all('th')
if len(headers) > 0 and len(column_name) == 0:
for header_names in headers:
column_name.append(header_names.get_text())
new_table = pd.DataFrame(columns = column_name, index = range(0,n_rows))
row_index = 0
for row in table.find_all('tr'):
column_index = 0
columns = row.find_all('td')
for column in columns:
new_table.iat[row_index, column_index] = column.get_text()
column_index += 1
if len(columns) > 0:
row_index += 1
第一次运行代码时,我将间隔设置为从2015年11月7日起的两年(每周价格)。问题是结果数据帧长101行但我知道它应该更多(106)。然后我试图在页面打开时(这是每天)将间隔完全更改为默认值,但我仍然有相同的101行,而实际数据要大得多。代码有什么问题,或雅虎财务正在做什么?
感谢任何帮助,我真的被困在这里。
答案 0 :(得分:0)
AFAIK,该API于2017年5月关闭。您可以使用Google财经吗?如果您可以接受Ex cel作为解决方案,这里有一个文件的链接,您可以下载该文件以下载各种历史时间序列数据。
http://investexcel.net/multiple-stock-quote-downloader-for-excel/