首页 > 解决方案 > 从网站的 ap 标签内的多个同名 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>

想要 span class= text muted Gross 下的第二个 span 中的文本。

标签: python-3.xweb-scrapingbeautifulsoup

解决方案


您可以做的是找到<span>包含文本“Gross:”的标签。然后,一旦它找到那个标签,就告诉它去寻找下一个<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

推荐阅读