在标记之间获取多个文本块

2024-05-08 00:41:32 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的HTML:

<div class="left_panel">
    <h4>Header1</h4>
      block of text that I want.            
    <br />
    <br />
      another block of text that I want.
    <br />
    <br />
      still more text that I want.
    <br />
    <br />
      <p>&nbsp;</p>
    <h4>Header2</h4>

文本块的数目是可变的,Header1是一致的,Header2不是。

我使用以下代码成功地提取了第一个文本块:

^{pr2}$

但是,我需要两个h4标记之间的所有项目,我希望使用h4.nextSiblings可以解决此问题,但由于某些原因,返回以下错误:

TypeError: 'NoneType' object is not callable

我一直在尝试这个答案的变体:Find next siblings until a certain one using beautifulsoup但是没有前导标记让我很困惑。


Tags: oftext标记文本brdivthathtml
2条回答

我不明白为什么你要把soup作为参数传递,但是你没有使用它。在

如果您使用了正确的soup实例,就不会出现该错误。findAllNext(h4)返回<h4>Header1</h4>和{},对每一个应用nextSibling返回文本同级,它们是

block of text that I want.

以及

^{pr2}$

对你来说。在

找到第一个标题并在^{}上迭代,直到找到另一个标题:

from bs4 import BeautifulSoup

data = """
<div class="left_panel">
    <h4>Header1</h4>
      block of text that I want.
    <br />
    <br />
      another block of text that I want.
    <br />
    <br />
      still more text that I want.
    <br />
    <br />
      <p>&nbsp;</p>
    <h4>Header2</h4>
</div>
"""

soup = BeautifulSoup(data)
header1 = soup.find('h4', text='Header1')
for item in header1.next_siblings:
    if getattr(item, 'name') == 'h4' and item.text == 'Header2':
        break

    print item

更新(收集两个h4标记之间的文本):

^{pr2}$

相关问题 更多 >