使用 BeautifulSoup 按某些 HTML 结构分割文本

Jav*_*ake 2 html beautifulsoup

我试图根据某种模式拆分一些 HTML。

HTML 的特定部分必须分为 1 个或多个部分或文本数组。我能够划分此 HTML 的方法是查看第一个<strong>和一个 double <br />。这两个标签之间的所有文本都必须放入列表中并进行迭代。

如何轻松解决这个问题?

所以我想要以下 HTML:

<div class="clearfix">
    <!--# of ppl associated with place-->
        This is some kind of buzzword:<br />
    <br />
    <!--Persontype-->
        <strong>Jimbo</strong> Jack            <br />
Some filler text            <br />
More weird stuff
            <br />
Unstructured text        <br />
        <br />
        <strong>Jacky</strong> Bradson            <br />
This is just a test            <br />
Nothing but a test
            <br />
More unstructured stuff        <br />
        <br />
        <strong>Junior</strong> Bossman            <br />
This is fluffy
            <br />
As I would expect        <br />
        <br />
</div>
Run Code Online (Sandbox Code Playgroud)

分成以下部分。

第一部分:

        <strong>Jimbo</strong> Jack            <br />
Some filler text            <br />
More weird stuff
            <br />
Unstructured text        <br />
        <br />
Run Code Online (Sandbox Code Playgroud)

第二部分:

        <strong>Jacky</strong> Bradson            <br />
This is just a test            <br />
Nothing but a test
            <br />
More unstructured stuff        <br />
        <br />
Run Code Online (Sandbox Code Playgroud)

第三方:

        <strong>Junior</strong> Bossman            <br />
This is fluffy
            <br />
As I would expect        <br />
        <br />
</div>
Run Code Online (Sandbox Code Playgroud)

abe*_*rna 5

基本的解决方案是使用连接、美化和拆分。基本思想是将其转换为文本并分离出感兴趣的部分。

from bs4 import BeautifulSoup
soup = BeautifulSoup(''.join(text))
for i in soup.prettify().split('<!--Persontype-->')[1].split('<strong>'):
    print '<strong>' + ''.join(i)
Run Code Online (Sandbox Code Playgroud)

文本文件是:

text= '''
<div class="clearfix">
    <!--# of ppl associated with place-->
        This is some kind of buzzword:<br />
    <br />
    <!--Persontype-->
        <strong>Jimbo</strong> Jack            <br />
Some filler text            <br />
More wierd stuff
            <br />
Unstructured text        <br />
        <br />
        <strong>Jacky</strong> Bradson            <br />
This is just a test            <br />
Nothing but a test
            <br />
More unstructured stuff        <br />
        <br />
        <strong>Junior</strong> Bossman            <br />
This is fluffy
            <br />
As i would expect        <br />
        <br />
</div>
'''
Run Code Online (Sandbox Code Playgroud)

输出是:

Jimbo Jack
一些填充文本
更多奇怪的东西
非结构化文本

Jacky Bradson
这只是一个测试
只是一个测试
更多非结构化的东西


Junior Bossman
这很蓬松
正如我所期望的