【发布时间】:2020-04-28 06:00:09
【问题描述】:
我是使用 Beautiful Soup 的新手,无法理解为什么 unwrap() 会像我一样工作。
我有python 3.6.9 和beautifulsoup4 4.8.2。
我的输入 HTML 是:
html='''
<html>
<head>
<meta charset="utf-8"/>
<link rel="stylesheet" type="text/css" href="../../common/style.css"/>
</head>
<body>
<div id="content">
<h3 HEAD /h3>
<div class="myclass">
<br>
MY TEXT
<br>
</div>
<h3 HEAD2 /h3>
<div class="myclass">
<br>
MY TEXT 2
<br>
</div>
</div>
</body>
</html>
'''
我想用id“内容”获取div的内容。
我认为这可以通过使用unwrap():
soup=BeautifulSoup(html, 'lxml')
content=soup.find('div', {"id": "content"}).unwrap()
但这给了我标签,没有它的内容:
print(content):
<div id="content"></div>
这里发生了什么?如何正确提取标签的内容,而不保留周围的标签?
我期望的输出是:
<h3 HEAD /h3>
<div class="myclass">
<br>
MY TEXT
<br>
</div>
<h3 HEAD2 /h3>
<div class="myclass">
<br>
MY TEXT 2
<br>
</div>
当使用 .children 的方法时,在附加到 BeautifulSoup 对象时,我遇到了转义标签的问题:
final_content=''.join([str(i) for i in content.children])
body.append(final_content)
这会导致:
<h3 head="">
<div class="myclass">
<br/>
MY TEXT
<br/>
</div>
<h3 head2="">
<div class="myclass">
<br/>
MY TEXT 2
<br/>
</div>
</h3></h3></div>
【问题讨论】:
标签: python beautifulsoup