Skip to main content
 首页 » 编程设计

Python BeautifulSoup 在特定标签之后提取文本

2025年05月04日11JustinYoung

我正在尝试使用 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然后我想打印出 Services
同样,如果 <p class="title">文本值为 Reference然后我想打印出 ANAJSKJD23423-Commission 如果 <p class="title">值为 Countries然后打印出所有国家,即 Belgium,France,Luxembourg。

我知道我可以使用 <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)