python-3.x - 从网站的 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 中的文本。
解决方案
您可以做的是找到<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
推荐阅读
- sql-server - 未链接时如何将更改的数据、更改的 sps 和视图移动到不同的服务器
- c++ - glDrawArrays 出现 OpenGL 错误 1280
- python - datetime strptime 一次有效,但不是另一个类似的时间
- http - HTTP PUT 中的幂等性是什么?我可以禁止覆盖资源吗?
- c# - Dapper splitOn 错误
- r - Analysis Services 多维数据集的数据整理
- azure - 是否可以使用服务主体通过基于角色的访问控制对未托管在 Azure 中的应用程序进行身份验证?
- javascript - 使用 this.setState 后反应不以正确的状态值呈现
- javascript - 将 CSS 应用于 iFrame(或其他元素)之外的项目
- python - 如何在热图中添加第二个比例?