【问题标题】:BeautifulSoup returns noneTypeBeautifulSoup 返回 noneType
【发布时间】:2018-04-27 19:51:57
【问题描述】:

我正在尝试使用以下 Python 代码从 EDGAR 数据库中获取一些数据。

html1 = 'https://www.sec.gov/Archives/edgar/data/320193/000032019317000070/aapl-20170930.xml'
xbrl_resp = requests.get(html1)
xbrl_str = xbrl_resp.text
soup1 = BeautifulSoup(xbrl_str, 'lxml')
mytag = soup1.find('us-gaap:StockholdersEquity',{'contextRef':'FI2017Q4'})
print(mytag)

即使标记存在于 xml 文件中,它也不会返回任何内容。任何建议将不胜感激

【问题讨论】:

    标签: python xml xbrl


    【解决方案1】:

    您遇到了几个问题。首先,通过请求的内容而不是文本。其次,使用 xml 解析器而不是 lxml 解析器。最后,您在“us-gaap:StockholdersEquity”标签中搜索错误。

    html1 = 'https://www.sec.gov/Archives/edgar/data/320193/000032019317000070/aapl-20170930.xml'
    xbrl_resp = requests.get(html1)
    xbrl_str = xbrl_resp.content
    soup1 = BeautifulSoup(xbrl_str, 'xml')
    mytag = soup1.find('us-gaap:StockholdersEquity',contextRef='FI2017Q4')
    print(mytag)
    

    【讨论】:

    • 我尝试了这段代码,它成功了。谢谢顺便说一句:soup = BeautifulSoup(xbrl_str, 'lxml') tag_list = soup.find_all() for tag_list 中的标签: if tag.name == 'us-gaap:stockholdersequity': if tag.attrs['contextref'] == 'FI2017Q4':打印(tag.text)
    【解决方案2】:

    XML 解析器将 xml 标记转换为小写:请参见此处:https://www.crummy.com/software/BeautifulSoup/bs4/doc/#parsing-xml。因此您需要使用小写名称进行搜索,例如:

         mytag = soup1.find('us-gaap:stockholdersequity',contextref='FI2017Q4')
    

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,soup.find('table') 返回None。 此问题出现在 lxml 包版本为 3.4.4 的环境中。

      在另一个使用 lxml 版本 3.7.3 的环境中,相同的代码运行良好。

      所以,我又回到了“糟糕”的环境,升级了 lxml 包版本。

      pip install lxml --upgrade
      

      soup.find('table') 之后开始工作。

      希望这会有所帮助!

      内存

      【讨论】:

        猜你喜欢
        • 2020-10-18
        • 1970-01-01
        • 2019-01-12
        • 1970-01-01
        • 1970-01-01
        • 2016-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多