python - Python Beautiful Soup unwrap() 没有按预期工作 - 想要提取标签的内容
问题描述
我是使用 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>
'''
我想div
用id
“内容”来获取内容。我认为这将通过使用来完成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>
解决方案
TL;DR:打印soup
,不是content
我有同样的问题,无法弄清楚为什么unwrap()
不返回我想要的。原因是它的工作方式与我们预期的略有不同。
unwrap()
清除初始汤中的标签并返回标签。我们保存在其他变量中的任何内容都soup.find()
将只包含标签,不包含内容。
推荐阅读
- javascript - 三个js更新tubegeometry不可见r100
- python - 需要帮助将 2 个切片索引绘制到 python 中的条形图中
- python - Tweepy 一次查找多条推文的扩展推文?
- php - Laravel 日期时间 created_at
- reactjs - 在 React 中,在继承 propTypes 时,如何避免重复?
- matlab - 在 MATLAB 中进行矢量化以避免 for 循环
- python - Ngram 在以下所需输出中具有计数
- c# - 控制器在多层解决方案中的位置
- c# - 如何正确共享 C# 中的线程?
- c - 如何在客户端-服务器应用程序中异步发送文件?(使用 winsock2.h,在 C 中)