首页 > 解决方案 > 使用 BeautifulSoup 从网页下载损益表并转换为 Pandas 数据框?

问题描述

我正在尝试获取麦当劳公司 (MCD) 的损益表“ https://finance.yahoo.com/quote/MCD/financials?p=MCD ”。我用了漂亮的汤。下载了 html,但损益表表似乎没有典型的“tr”、“td”标签。如何将损益表转换为 df 数据框?

我的代码:

url="https://finance.yahoo.com/quote/MCD/financials?p=MCD"
result = requests.get(url)
result.raise_for_status()
result.encoding = "utf-8"


src = result.content
soup = BeautifulSoup(src, 'lxml')
print(soup)

array = []
for tr_tag in soup.find_all('tr'):
    b_tag = tr_tag.find_all('td')
    array.append(b_tag)
print(array)

标签: htmlpandasdataframehtml-tablebeautifulsoup

解决方案


“使用 BeautifulSoup 从网页下载损益表...”

首先,你说soup.find_all('tr')tr但是,损益表中没有标签。在网站上,每一行都有一个div标签,然后有一个特定的class. 指定class确实可以帮助您准确地告诉程序您想要从网站上得到什么。我使用了div class“D(tbr) fi-row Bgc($hoverBgColor):h”,因为它在表格的每一行中都是一致的。然后,您可以使用该text功能从网站获取原始文本,而不是HTML.

url="https://finance.yahoo.com/quote/MCD/financials?p=MCD"
result = requests.get(url)
result.raise_for_status()
result.encoding = "utf-8"

src = result.content
soup = BeautifulSoup(src, 'lxml')

rows = []
for i in soup.find_all('div',{'class':'D(tbr) fi-row Bgc($hoverBgColor):h'}):
    row = i.text
    rows.append(row)

print(rows)

推荐阅读