如何用Beautiful Soup取得两个标签间的所有内容?

发布于 2022-09-11 17:28:58 字数 549 浏览 15 评论 0

<h4>描述1</h4>

<p>text</p>
<p>text</p>
<p>text</p>

<h4>描述2</h4>

<p>text</p>
<p>text</p>
<p>text</p>
<span>asdf</span>

<h4>描述3</h4>

<pre>
4
1
1
2
2</pre>
<p>text</p>

<h4>描述4</h4>

<p>text</p>
<pre>
1
2</pre>

HTML代码如上,如何取得两个<h4>之间的内容?如:

  • 第一次要取得“描述1”和“描述2”之间的所有内容
  • 第二次要取得“描述2”和“描述3”之间的所有内容

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

胡渣熟男 2022-09-18 17:28:58

假设所有 h4 标签是同级, 你可以调用 next_siblings 枚举它的所有同级元素, 如

# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup

html_doc = '''
<html>
    <body>
        <h4>描述1</h4>
        <p>p1.1</p>
        <p>p1.2</p>

        <h4>描述2</h4>
        <p>p2.1</p>
        <p>p2.2</p>
        <span>span2.1</span>
    </body>
</html>
'''
soup = BeautifulSoup(html_doc, 'html.parser')
all_h4 = soup.select('h4')
for h4 in all_h4:
    print('====')
    print(f'{h4!r}')
    for sibling in h4.next_siblings:
        if sibling in all_h4:
            break
        print(f'  {sibling!r}')

输出结果

====
<h4>描述1</h4>
  '\n'
  <p>p1.1</p>
  '\n'
  <p>p1.2</p>
  '\n'
====
<h4>描述2</h4>
  '\n'
  <p>p2.1</p>
  '\n'
  <p>p2.2</p>
  '\n'
  <span>span2.1</span>
  '\n'
挖鼻大婶 2022-09-18 17:28:58

r = requests.get(url,headers=headers)
html = r.text
soup = BeautifulSoup(,'html.parser')
result1 = soup.find_all('h4')[0:1]
result2 = soup.find_all('h4')[1:2]

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文