Python 使用BeautifulSoup分析嵌套的div

Python 使用BeautifulSoup分析嵌套的div,python,beautifulsoup,Python,Beautifulsoup,我正试图用文本、表格和html解析许多网页。每一页都有不同数量的段落,但尽管每个段落都以开头的开头,但结尾的直到结尾才会出现。我只是尝试获取内容,过滤掉某些元素,然后用其他元素替换它们 所需结果:text1 text2(已删除表)text3 实际结果text1\n\ntext2some text heretext 3text2some text heretext 3(表格已删除) 从bs4导入美化组 html=”“” 标题 额外数据 文本1 下一篇课文2此处课文3 """ soup=Beauti

我正试图用文本、表格和html解析许多网页。每一页都有不同数量的段落,但尽管每个段落都以开头的
开头,但结尾的
直到结尾才会出现。我只是尝试获取内容,过滤掉某些元素,然后用其他元素替换它们

所需结果:
text1 text2(已删除表)text3

实际结果
text1\n\ntext2some text heretext 3text2some text heretext 3(表格已删除)

从bs4导入美化组
html=”“”
标题
额外数据
文本1
下一篇课文2此处课文3
"""
soup=BeautifulSoup(html,“html5lib”)
tags=soup.find('h3')。find_all_next()
contents=“”
对于标记中的标记:
如果tag.name=='table':
contents+=(表已删除)
contents+=tag.text.strip()
印刷品(目录)

不要使用
html5lib
作为解析器,而是使用
html.parser
。也就是说,您可以使用a和
select one
方法访问紧跟在“h3”标记之后的“div”

从这里,您可以使用以下方法创建以下“div”标记并替换“table”标记

[107]中的
:来自bs4导入BeautifulSoup
在[108]:html=“”
…:标题
…:额外数据
...: 
…:text1
...:     
…:下一个2此处的一些文本文本文本3
...:     
...: """
在[109]中:soup=beautifulsou(html'html.parser')
在[110]中:my_div=汤。选择一个('h3+div'))
在[111]中:my_div
出[111]:
文本1
下一篇课文2此处课文3
[112]:我的分区展开()
出[112]:
在[113]中:my_div
出[113]:
文本1
下一篇课文2此处课文3
在[114]中:my_div.table.replace_为(‘(table deleted)’)
Out[114]:这里有一些文本
在[115]中:my_div
出[115]:
文本1
next2(删除表格)文本3

为什么不找到表标记并更改它,为什么不解析祖先呢。我想我喜欢给自己制造麻烦。这确实有效
from bs4 import BeautifulSoup

html = """
<h1>title</h1>
<h3>extra data</h3>
<div>
    text1
    <div>
        <b>next2</b><table>some text here</table>text 3
    </div>
</div>"""

soup = BeautifulSoup(html, 'html5lib')
tags = soup.find('h3').find_all_next()
contents = ""
for tag in tags:
    if tag.name == 'table':
        contents += " (table deleted) "

    contents += tag.text.strip()

print(contents)
In [107]: from bs4 import BeautifulSoup

In [108]: html = """
     ...: <h1>title</h1>
     ...: <h3>extra data</h3>
     ...: <div>
     ...:     text1
     ...:     <div>
     ...:         <b>next2</b><table>some text here</table>text 3
     ...:     </div>
     ...: </div>"""

In [109]: soup = BeautifulSoup(html, 'html.parser')

In [110]: my_div = soup.select_one('h3 + div')

In [111]: my_div
Out[111]: 
<div>
    text1
    <div>
<b>next2</b><table>some text here</table>text 3
    </div>
</div>

In [112]: my_div.div.unwrap()
Out[112]: <div></div>

In [113]: my_div
Out[113]: 
<div>
    text1

<b>next2</b><table>some text here</table>text 3

</div>

In [114]: my_div.table.replace_with('(table deleted)')
Out[114]: <table>some text here</table>

In [115]: my_div
Out[115]: 
<div>
    text1

<b>next2</b>(table deleted)text 3

</div>