我试图用文本,表格和HTML解析许多网页。每个页面都有不同数量的段落,但每个段落都以开头-c
开头,结束<div>
直到结束才会出现。我只是试图获取内容,过滤掉某些元素并用其他东西替换它们
期望的结果:</div>
实际结果text1 <b>text2</b> (table_deleted) text3
text1\n\ntext2some text heretext 3text2some text heretext 3 (table deleted)
答案 0 :(得分:0)
请勿使用html5lib
作为解析器,而是使用html.parser
。话虽如此,您可以使用css selector和select_one
方法访问紧跟在“h3”标记之后的“div”。
从那里,您可以unwrap
以下“div”标记,并使用replace_with
方法替换“table”标记
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>