是否有一个功能来提取标签内的标签和所有其他剩余的标签在美丽的汤

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (30)

我需要从这种格式的网页中删除数据。我只需要h2和h3的第一个孩子的内部文本,即第一个跨度和所有其他<p>标签

<div class="info">
   <h2>
      <span>first heading</span>
      <span> not required</span>
   </h2>
   <p> 1 paragraph</p>
   <p> 2 paragraph</p>
 <div> some tags</div>

  <h3>
      <span>second heading</span>
      <span> not required</span>
   </h3>
   <p> 3 paragraph</p>
   <p> 4 paragraph</p>

</div>

输出;

first heading
 1 paragraph
 2 paragraph
second heading
 3 paragraph
 4 paragraph

soup.find_all([“h1”,“p”,“h2”,“h3”])尝试之后我也得到了第二个跨越内部文本,我不想要。我只需要h2和h3'的第一个内容和p标签内容的内部文本。我是python和汤的新手任何帮助将不胜感激。

提问于
用户回答回答于

你可以使用find_all()获取你想要的标签,然后在你想要第一个孩子的元素上使用findChild()

from bs4 import BeautifulSoup

html = """
<div class="info">
   <h2>
      <span>first heading</span>
      <span> not required</span>
   </h2>
   <p> 1 paragraph</p>
   <p> 2 paragraph</p>
 <div> some tags</div>

  <h3>
      <span>second heading</span>
      <span> not required</span>
   </h3>
   <p> 3 paragraph</p>
   <p> 4 paragraph</p>

</div>
"""
soup = BeautifulSoup(html, "lxml")

for elem in soup.find_all(['h2', 'h3', 'p']):
    if elem.name == 'p':
        print(elem.text)
    else:
        print(elem.findChild().text)

输出;

first heading
 1 paragraph
 2 paragraph
second heading
 3 paragraph
 4 paragraph
用户回答回答于

试试这个吧

from bs4 import BeautifulSoup as bs
my_data = [your html above]
soup = bs(my_data, "lxml")

for head in ["h2", "h3"]:
  target = soup.find(head)
  print(target.findChild().text)

输出:

first heading
second heading

扫码关注云+社区

领取腾讯云代金券