beautifulsoup解析 - 处理上标?

时间:2015-04-19 23:52:28

标签: python html beautifulsoup

这是我尝试从以下位置提取信息的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字符串?

2 个答案:

答案 0 :(得分:2)

跨度不是兄弟,它是祖父母第一堂兄弟的兄弟的孩子,一旦被移除(谢谢,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

答案 1 :(得分:2)

或者,您可以在找到find_next()元素后使用<sup>5</sup>,如下所示:

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实例       返回与给定条件匹配的第一个项目       出现在文档中的此标记之后。