我正在尝试从雅虎财经中提取股市数据 以下是链接 https://au.finance.yahoo.com/quote/ABP.AX/history?p=ABP.AX
我的代码如下
import pandas as pd
dfs = pd.read_html('https://au.finance.yahoo.com/quote/ABP.AX/history?p=ABP.AX')
print(dfs)
上面的代码导致以下错误
Traceback (most recent call last):
File "/home/furqan/Desktop/Data/Fundamental Analysis/get_data/ax_data.py", line 5, in <module>
dfs = pd.read_html('https://au.finance.yahoo.com/quote/ABP.AX/history?p=ABP.AX')
File "/usr/local/lib/python3.5/dist-packages/pandas/io/html.py", line 874, in read_html
parse_dates, tupleize_cols, thousands, attrs, encoding)
File "/usr/local/lib/python3.5/dist-packages/pandas/io/html.py", line 747, in _parse
thousands=thousands))
File "/usr/local/lib/python3.5/dist-packages/pandas/io/html.py", line 628, in _data_to_frame
_expand_elements(body)
File "/usr/local/lib/python3.5/dist-packages/pandas/io/html.py", line 611, in _expand_elements
body[ind] += empty * (lens_max - length)
TypeError: ufunc 'add' did not contain a loop with signature matching types dtype('<U47') dtype('<U47') dtype('<U47')
如何解决此问题?
谢谢使用完成。
import fix_yahoo_finance as yf
data = yf.download("SPY", start="2017-01-01", end="2017-04-30")
为什么不使用 ASX API? 例如 https://www.asx.com.au/asx/1/share/ABP/prices?interval=daily&count=255
下面是一些代码,可以从中读取并写入 Excel,你可以对其进行改进和调整。
import requests
import pandas as pd
base_url = 'https://www.asx.com.au/asx/1/share/'
code = 'abp'
suffix = '/prices?interval=daily&count=255'
url = base_url + code + suffix
r = requests.get(url, timeout=10)
price_data = r.json()
df = pd.DataFrame(price_data['data'])
df['close_date'] = pd.to_datetime(df.close_date.str[0:10], format='%Y-%m-%d', errors='coerce')
df.to_excel(code + '_price_hist.xlsx', sheet_name=code, index=False)
为此使用pandas_datareader
包可能更容易:
pip3 install pandas_datareader
from pandas_datareader import yahoo
In [13]: yahoo.quotes.YahooQuotesReader('ABP.AX').read()
Out[13]:
PE change_pct last short_ratio time
ABP.AX 5.65 -1.94% 3.04 0.0 4:10pm