用python提取雅虎财务资产负债表

用python提取雅虎财务资产负债表,python,beautifulsoup,yahoo-finance,Python,Beautifulsoup,Yahoo Finance,我正在学习使用beautifulsoup和python来提取html表。我尝试使用以下代码提取谷歌的资产负债表。然而,我似乎无法正确地刮除所有行 我无法忽略只是一个间隔符的行,也无法提取总计行(例如,总资产) 有什么建议吗?关于简化代码的建议也很有价值 from bs4 import BeautifulSoup import requests def bs_extract(stock_ticker): url= 'https://finance.yahoo.com/q/bs?s='+s

我正在学习使用beautifulsoup和python来提取html表。我尝试使用以下代码提取谷歌的资产负债表。然而,我似乎无法正确地刮除所有行

我无法忽略只是一个间隔符的行,也无法提取总计行(例如,总资产)

有什么建议吗?关于简化代码的建议也很有价值

from bs4 import BeautifulSoup
import requests

def bs_extract(stock_ticker):
    url= 'https://finance.yahoo.com/q/bs?s='+str(stock_ticker)+'&annual'
    source_code = requests.get(url)
    plain_text=source_code.text
    soup = BeautifulSoup(plain_text)

    c1= ""
    c2= ""
    c3= ""
    c4= ""
    c5= ""

    table = soup.find("table", { "class" : "yfnc_tabledata1" })
    # print (table)
    for row in table.findAll("tr"):
        cells = row.findAll("td")
        if len(cells)==5:
            c1=cells[0].find(text=True)
            c2=cells[1].find(text=True)
            c3=cells[2].find(text=True)
            c4=cells[3].find(text=True)
            c5=cells[4].find(text=True)
        elif len(cells)==6:
            c1=cells[1].find(text=True)
            c2=cells[2].find(text=True)
            c3=cells[3].find(text=True)
            c4=cells[4].find(text=True)
            c5=cells[5].find(text=True)
        elif len(cells)==1:
            c1=cells[0].find(text=True)
            c2=""
            c3=""
            c4=""
            c5=""
        else:
            pass
        print(c1,c2,c3,c4,c5)

 bs_extract('goog')

您可能会发现,通过YQL更容易将这些数据结构化。请参见

您可能会发现,通过YQL更容易将这些数据结构化。请参见谷歌的网页
google
中没有包含类
yfnc\u tabledata1
的表格。谷歌和雅虎将以非常不同的方式显示他们的表格
yfnc
可能是“雅虎金融”的缩写。为什么谷歌会使用他们的ID和标签?打开浏览器的开发人员工具,尝试检查元素,了解如何在所需页面上进行分析。关于如何使其更具python风格的注意事项:您可以将这些变量(c1、c2等)放入列表中,而不是单独的变量,然后你就不必有那么多重复的代码了。
goog
的网页上没有一个表,该表中的类
yfnc\u tabledata1
谷歌和雅虎将以非常不同的方式显示他们的表
yfnc
可能是“雅虎金融”的缩写。为什么谷歌会使用他们的ID和标签?打开浏览器的开发人员工具,尝试检查元素,了解如何在所需页面上进行解析。关于如何使其更具Pythonic的注意事项:您可以将这些变量(c1、c2等)放入列表中,而不是单独的变量,这样您就不必有太多重复的代码。只需响应Kupiakos即可。我尝试使用bs_extract('msft'),您将在源代码的某个地方找到yfnc。这一点很好。知道为什么我不能以粗体形式提取行(即总数)吗?只是为了回应Kupiakos。我尝试使用bs_extract('msft'),您将在源代码的某个地方找到yfnc。这一点很好。你知道为什么我不能提取粗体的行(即总数)吗?