python - 根据容器中的元素获取副标题文本
问题描述
这是我被这段重复的代码部分困住的地方:
<span class="help-block"></span>
<h5 class="omb_authTitle">prettyname </h5>
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-check size_listing"></i></span>
<select class="form-control" id="id_uglyname" name="uglyname">
<option value=""></option>
<option selected="" value="Yes">yes</option>
<option value="No">No</option>
</select>
</div>
我使用 Beautifulsoup 创建字典,如下所示:
{'uglyname' : 'Yes'}
我使用 select_one 从列表中搜索了name
属性,然后获取下拉菜单的选定值。
但我更想要的是h5
作为键的文本,如下所示:
{'prettyname': 'Yes'}
h5
我怎样才能从 中的那个唯一名称转到那个特定的div
?
谢谢!
解决方案
您可以使用:has()
伪类。:has()
将向前看,看看其中的选择器是否为真。在这里,我们以h5
我们想要的元素为目标,在相邻兄弟div
下查看,在div
' 的直接select
子级下查看并比较属性。:has()
请注意,我们通过在选择器之前使用相邻的兄弟组合器来使用相对选择器+
。
from bs4 import BeautifulSoup
html = """
<span class="help-block"></span>
<h5 class="omb_authTitle">prettyname </h5>
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-check size_listing"></i></span>
<select class="form-control" id="id_uglyname" name="uglyname">
<option value=""></option>
<option selected="" value="Yes">yes</option>
<option value="No">No</option>
</select>
</div>
"""
soup = BeautifulSoup(html, 'html.parser')
print(soup.select_one('h5:has(+ div > select[name=uglyname])'))
输出
<h5 class="omb_authTitle">prettyname </h5>
推荐阅读
- javascript - 如何在 next-auth 的扩展模型上进行 CRUD?
- javascript - 有没有办法在谷歌浏览器上自动关闭无法访问的(DNS_PROBE_FINISHED_NXDOMAIN 等)标签?
- babeljs - Nuxt js - 全新安装的 nuxt 2.14.6 包含 babel“宽松选项”警告
- security - 网络应用可以不通过服务器直接访问 Google Drive 等服务吗?
- kotlin - 除非我点击视图,否则 PieChart 不会显示来自 Firebase 的内容
- java - 如何修复空对象引用上的 DroidSpeech 代码?
- php - 如何为选择选项编写触发器?
- javascript - 如何使用 javasript 按日期对表格进行排序?
- java - 表达式的类型必须是数组类型,但它解析为 Instances
- node.js - PassportJS 未对用户进行身份验证