从网站中p标签内多个具有相同名称的span元素中刮取span文本

时间:2019-02-27 22:15:31

标签: python-3.x web-scraping beautifulsoup

我想从名称相似的多个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 =静音的文本。

1 个答案:

答案 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