使用BeautifulSoup清除code标签内容后,为何未获取其余标签文本?
问题背景
我有如下HTML文本(已翻译为中文):
<p>在一篇讨论ResNet的文章里有这样一段表述</p> <p><strong>第二种是瓶颈单元,由三个堆叠操作组成。用1x1、3x3、1x1的卷积序列替代了之前的设计。这两个1x1操作用于降维和恢复维度。这使得中间的3x3卷积可以在密度更低的特征向量上运算。另外,BN(批量归一化)会在每个卷积之后、ReLU非线性激活之前应用。</strong></p> <p>我不太理解“<code>这使得中间的3x3卷积可以在密度更低的特征向量上运算</code>”这句话是什么意思?具体来说,<code>密度更低的特征向量</code>指什么?是什么导致了这种特征向量的产生?</p>
我的需求是:清除所有<code>标签内的内容,然后提取其余标签中的文本。我尝试了以下Python代码:
soup = BeautifulSoup(text, 'html.parser') tag = soup.code tag.clear() tag
但执行后仅输出<code></code>,请问为何其余文本未被提取?
问题原因
你的代码存在两个核心问题:
- 仅处理了单个
<code>标签:soup.code只会匹配HTML中的第一个<code>标签,而你的文本里有多个<code>标签,其余的并没有被清空。 - 未提取整个文档的文本:你最后只返回了被清空的单个
<code>标签对象,而没有对处理后的整个文档调用文本提取方法。
正确实现代码
要完成需求,需要遍历所有<code>标签清空内容,再提取整个文档的文本:
from bs4 import BeautifulSoup # 替换为你的HTML文本(已翻译为中文) html_text = """ <p>在一篇讨论ResNet的文章里有这样一段表述</p> <p><strong>第二种是瓶颈单元,由三个堆叠操作组成。用1x1、3x3、1x1的卷积序列替代了之前的设计。这两个1x1操作用于降维和恢复维度。这使得中间的3x3卷积可以在密度更低的特征向量上运算。另外,BN(批量归一化)会在每个卷积之后、ReLU非线性激活之前应用。</strong></p> <p>我不太理解“<code>这使得中间的3x3卷积可以在密度更低的特征向量上运算</code>”这句话是什么意思?具体来说,<code>密度更低的特征向量</code>指什么?是什么导致了这种特征向量的产生?</p> """ # 解析HTML soup = BeautifulSoup(html_text, 'html.parser') # 遍历所有<code>标签,逐个清空内容 for code_tag in soup.find_all('code'): code_tag.clear() # 提取处理后的所有文本,用换行分隔不同段落 result = soup.get_text(separator='\n').strip() print(result)
代码解释
soup.find_all('code'):找到HTML中所有<code>标签,确保全部被处理。code_tag.clear():清空单个<code>标签内的所有内容。soup.get_text(separator='\n'):提取整个文档的文本,separator='\n'让不同段落的文本换行显示,避免拥挤;.strip()去除首尾的空白字符。
运行结果
在一篇讨论ResNet的文章里有这样一段表述 第二种是瓶颈单元,由三个堆叠操作组成。用1x1、3x3、1x1的卷积序列替代了之前的设计。这两个1x1操作用于降维和恢复维度。这使得中间的3x3卷积可以在密度更低的特征向量上运算。另外,BN(批量归一化)会在每个卷积之后、ReLU非线性激活之前应用。 我不太理解“”这句话是什么意思?具体来说,指什么?是什么导致了这种特征向量的产生?
内容的提问来源于stack exchange,提问作者Katy
相关产品推荐
相关产品推荐

