【问题标题】:beautifulsoup parsing - dealing with superscript?Beautifulsoup 解析 - 处理上标?
【发布时间】:2015-04-19 23:52:27
【问题描述】:

这是我试图从中提取信息的 HTML 片段:

<td class="yfnc_tablehead1" width="74%">Market Cap (intraday)<font size="-1"><sup>5</sup></font>:</td><td class="yfnc_tabledata1"><span id="yfs_j10_aal">33.57B</span></td></tr>

网页上的样子:

市值(盘中)5:33.57B

我所拥有的(不起作用):

    HTML_MarketCap = soup.find('sup', text='5').find_next_sibling('span').text

如何提取 33.57B 字符串?

【问题讨论】:

    标签: python html beautifulsoup


    【解决方案1】:

    span 不是兄弟姐妹,它是 祖父母兄弟姐妹的孩子,一旦被移除(感谢,1.618)。

    from bs4 import BeautifulSoup as bs
    soup = bs("""<td class="yfnc_tablehead1" width="74%">Market Cap (intraday)
    <font size="-1"><sup>5</sup></font>:</td><td class="yfnc_tabledata1">
    <span id="yfs_j10_aal">33.57B</span></td></tr>""")
    
    soup.find("sup", text="5").parent.parent.find_next_sibling("td").find("span").text
    # u'33.57B'
    

    由于您似乎有问题,这是我的完整测试脚本(使用python-requests),它可靠地为我工作:

    import requests
    from bs4 import BeautifulSoup as bs
    
    url = "https://finance.yahoo.com/q/ks?s=AAL+Key+Statistics"
    
    r = requests.get(url)
    
    soup = bs(r.text)
    
    HTML_MarketCap = soup.find("sup", text="5").parent.parent.find_next_sibling("td").find("span").text
    
    print HTML_MarketCap
    

    【讨论】:

    • 堂兄,一旦被移除? ;)
    • 让我发笑,将其添加到答案中。
    • 对我不起作用。引用“市值(日内)”而不是上标会更好吗?
    • 我的确切代码是否适合您,即在使用我的测试字符串时?哪个更可靠取决于页面。
    • 确切的代码不起作用,但它可能是页面本身。这是我要抓取的页面。 finance.yahoo.com/q/ks?s=AAL+Key+Statistics
    【解决方案2】:

    或者,您可以在找到&lt;sup&gt;5&lt;/sup&gt; 元素后简单地使用find_next(),如下所示:

    from bs4 import BeautifulSoup
    
    s = '''<td class="yfnc_tablehead1" width="74%">Market Cap (intraday)<font size="-1"><sup>5</sup></font>:</td><td class="yfnc_tabledata1"><span id="yfs_j10_aal">33.57B</span></td></tr>'''
    
    soup  =BeautifulSoup(s)
    
    sup = soup.find('sup', text='5')
    
    sup.find_next('span')
    Out[5]: <span id="yfs_j10_aal">33.57B</span>
    
    sup.find_next('span').text
    Out[6]: u'33.57B'
    
    
    >>>help(sup.find_next)
    

    模块bs4.element中find_next方法的帮助:

    find_next(self, name=None, attrs={}, text=None, **kwargs) 方法 bs4.element.Tag 实例 返回与给定条件匹配的第一个项目和 出现在文档中此标记之后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      • 2013-03-20
      • 2012-05-22
      • 1970-01-01
      • 1970-01-01
      • 2019-07-28
      • 2017-10-30
      相关资源
      最近更新 更多