pandas 如何避免BeautifulSoup:数值错误:未找到表?

eanckbw9  于 2023-03-16  发布在  其他
关注(0)|答案(1)|浏览(172)

我想从一个有BeautifulSoup的网站中提取一个表。首先,我提取了DAX年终课程(元素的名称为“HistKurseYear”)。这非常好用。然后我尝试从Adidas提取年终课程(元素的名称为“HistKurseYear”),它给了我ValueError: No tables found。然而,在Excel中可以检索该表。

page_Ad = requests.get(
    "https://www.boerse.de/historische-kurse/Adidas-Aktie/DE000A1EWWW0")
soup_Ad = BeautifulSoup(page_Ad.content, 'html.parser')

element_Ad = soup_Ad.find(id='histKurseYear')

df_Adidas = pd.read_html(str(element_Ad))[0]
ValueError                                Traceback (most recent call last)
<ipython-input-8-03cb2123ccf1> in <module>
----> 1 df_Adidas = pd.read_html(str(element_Ad))[0]

5 frames
/usr/local/lib/python3.9/dist-packages/pandas/io/html.py in _parse_tables(self, doc, match, attrs)
    567 
    568         if not tables:
--> 569             raise ValueError("No tables found")
    570 
    571         result = []

ValueError: No tables found

此外,我尝试了网站上的另一个表,每月结束课程-工作。此外,在Excel中,可以检索该表。
我该怎么做才能得到想要的table?

mklgxw1f

mklgxw1f1#

问题是,没有这样的id元素,只有一个<div>,其名称类似于histKurseYear,这就是为什么pandas无法从您的None字符串中找到任何class
只需通过pandas.read_html()创建的 Dataframe 列表中的索引直接选择表即可:

pd.read_html('https://www.boerse.de/historische-kurse/Adidas-Aktie/DE000A1EWWW0')[4]

或者尝试与表中的字符串匹配:

pd.read_html('https://www.boerse.de/historische-kurse/Adidas-Aktie/DE000A1EWWW0', match='Jahr')[0]

相关问题