我想从名称相似的多个span标记中的span标记中抓取文本。使用python,beautifulsoup解析网站。
只是不能唯一地标识特定的总金额跨度元素。
span标记具有name=nv
和一个数据值,但另一个也具有。我只想提取数百万美元的总数字。
请告知。
这是结构:
<p class="sort-num_votes-visible">
<span class="text-muted">Votes:</span>
<span name="nv" data-value="93122">93,122</span>
<span class="ghost">|</span>
<span class="text-muted">Gross:</span>
<span name="nv" data-value="69,645,701">$69.65M</span>
</p>
想要第二个跨度下的文本,其跨度为class =静音的文本。
答案 0 :(得分:0)
您可以做的是找到带有文本“ Gross:”的<span>
标签。然后,一旦找到该标签,就告诉它去寻找下一个<span>
标签(即金额),并获取该文本。
from bs4 import BeautifulSoup as BS
html = '''<p class="sort-num_votes-visible">
<span class="text-muted">Votes:</span>
<span name="nv" data-value="93122">93,122</span>
<span class="ghost">|</span>
<span class="text-muted">Gross:</span>
<span name="nv" data-value="69,645,701">$69.65M</span>
</p>'''
soup = BS(html, 'html.parser')
gross_value = soup.find('span', text='Gross:').find_next('span').text
输出:
print (gross_value)
$69.65M
或者如果您想获取data-value
,请将最后一行更改为:
gross_value = soup.find('span', text='Gross:').find_next('span')['data-value']
输出:
print (gross_value)
69,645,701
最后,如果您需要这些值作为整数而不是字符串,则可以在以后以某种方式进行汇总:
gross_value = int(soup.find('span', text='Gross:').find_next('span')['data-value'].replace(',', ''))
输出:
print (gross_value)
69645701