使用BeautifulSoup解析嵌套的div

时间:2017-03-04 07:28:02

标签: python beautifulsoup

我试图用文本,表格和HTML解析许多网页。每个页面都有不同数量的段落,但每个段落都以开头-c开头,结束<div>直到结束才会出现。我只是试图获取内容,过滤掉某些元素并用其他东西替换它们

期望的结果:</div>

实际结果text1 <b>text2</b> (table_deleted) text3

text1\n\ntext2some text heretext 3text2some text heretext 3 (table deleted)

1 个答案:

答案 0 :(得分:0)

请勿使用html5lib作为解析器,而是使用html.parser。话虽如此,您可以使用css selectorselect_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>