python - Python BeautifulSoup 在特定标签之后提取文本
问题描述
我正在尝试使用 beautifulsoup 和 python 从网页中提取信息。我想提取特定标签下方的信息。要知道它是否是正确的标签,我想对其文本进行比较,然后在下一个直接标签中提取文本。
例如,如果以下内容是 HTML 页面源代码的一部分,
<div class="row">
::before
<div class="four columns">
<p class="title">Procurement type</p>
<p class="data strong">Services</p>
</div>
<div class="four columns">
<p class="title">Reference</p>
<p class="data strong">ANAJSKJD23423-Commission</p>
</div>
<div class="four columns">
<p class="title">Funding Agency</p>
<p class="data strong">Health Commission</p>
</div>
::after
</div>
<div class="row">
::before
::after
</div>
<hr>
<div class="row">
::before
<div class="twelve columns">
<p class="title">Countries</p>
<p class="data strong">
<span class>Belgium</span>
", "
<span class>France</span>
", "
<span class>Luxembourg</span>
</p>
<p></p>
</div>
::after
</div>
我想检查是否<p class="title">
有文本值Procurement type
然后我想打印出服务
类似地,如果<p class="title">
有文本值Reference
那么我想打印出ANAJSKJD23423-Commission并且如果<p class="title">
有值Countries
然后打印出所有国家,即比利时,法国,卢森堡。
我知道我可以提取所有文本<p class="data strong">
并将它们附加到列表中,然后使用索引获取所有值。但问题是,这些出现的顺序<p class="title>
是不固定的……在某些地方,国家可以在采购类型之前提到。因此,我想对文本值进行检查,然后提取下一个直接标记的文本值。我仍然是 BeautifulSoup 的新手,因此感谢您提供任何帮助。谢谢
解决方案
你可以通过多种方式做到这一点。给你。
from bs4 import BeautifulSoup
htmldata='''<div class="row">
::before
<div class="four columns">
<p class="title">Procurement type</p>
<p class="data strong">Services</p>
</div>
<div class="four columns">
<p class="title">Reference</p>
<p class="data strong">ANAJSKJD23423-Commission</p>
</div>
<div class="four columns">
<p class="title">Funding Agency</p>
<p class="data strong">Health Commission</p>
</div>
::after
</div>
<div class="row">
::before
::after
</div>
<hr>
<div class="row">
::before
<div class="twelve columns">
<p class="title">Countries</p>
<p class="data strong">
<span class>Belgium</span>
", "
<span class>France</span>
", "
<span class>Luxembourg</span>
</p>
<p></p>
</div>
::after
</div>'''
soup=BeautifulSoup(htmldata,'html.parser')
items=soup.find_all('p', class_='title')
for item in items:
if ('Procurement type' in item.text) or ('Reference' in item.text):
print(item.findNext('p').text)
推荐阅读
- django - 为什么 request.user == 'admin' 条件语句在 Django3 views.py 中不起作用?
- c# - 实体修改记录不跟踪
- reactjs - 如何使用 React ref 聚焦和选择复选框?
- css - 使用 webpack 时 CSS 文件路径呈现为 [Object object]
- objective-c - 你如何在Objective C中调用firebase快照而不是swift?
- reactjs - 如何在 Github Pages 构建文件夹中提供静态文件
- android - NFC 服务在三叶草设备上失效
- python - 在 python 中插入 XML 文本的任何其他可能方式?
- java - 如何在android / java中定义没有参数的构造函数
- java - 使用 equals 方法比较两个对象