【问题标题】:Beautiful Soup - Find identified tag in the original textBeautiful Soup - 在原文中查找已识别的标签
【发布时间】:2013-05-09 09:13:51
【问题描述】:

在识别出原始文档中的文本后,我需要处理 HTML 文档中的某些文本。假设我有这个 HTML 代码

<div id="identifier">
    <a href="link" id="linkid">
    </a>
</div>

我想删除&lt;a&gt; 标签中的id 属性。我可以使用 BeautifulSoup 识别特定标签,但因为它改变了原始文档的格式,我也无法搜索/替换字符串。我不想只写 BeautifulSoup 的输出,而是想在 original 文档中识别 &lt;a href="link" id="linkid"&gt; 标记并仅替换为 &lt;a href="link"&gt;。知道如何进行吗?

回答提出的几个问题:

  1. 这是一个庞大的现有代码库,需要进行一些更新,因此它不仅仅是一项单一的搜索/替换工作。

  2. 原始格式很重要,因为组织遵循一定的编码标准来格式化代码,我想保留这些标准。此外,为了完整起见,BS 引入了额外的标签,例如 for 等。

【问题讨论】:

  • 你能详细解释一下为什么不能只搜索/替换字符串吗?

标签: python beautifulsoup


【解决方案1】:

您使用的是哪个版本的 beautifulsoup? 您可以在 bs4 中像字典一样编辑 html 节点

来自文档: http://www.crummy.com/software/BeautifulSoup/bs4/doc/#changing-tag-names-and-attributes

soup = BeautifulSoup('<b class="boldest">Extremely bold</b>')
tag = soup.b

del tag['class']
del tag['id']

另外,你好像对美汤输出修改后的html代码的方式有问题。 如果您想漂亮地打印文档或使用自定义格式,您可以轻松完成

http://www.crummy.com/software/BeautifulSoup/bs4/doc/#output

【讨论】:

  • 我正在使用 BS4。我可以删除您提到的标签,但我想替换原始文档中的新标签。所以在这种情况下,我会得到 "Extremely bold" 但如果原始文本写成 "\n\nExtremely bold\n\n"它会丢失所有的换行符和制表符。我希望我澄清了这个问题。
  • 为什么保留它们很重要?换行符和空格在 HTML 中没有任何意义。您是否需要它们以使您的文档保持人类可读性?另外,正如 ASGM 所问,为什么不使用 beautifulsoup 就搜索/替换字符串是不行的
  • 不仅是人类可读的,而且遵循页面的格式指南很重要,因此不好。另外,我不想对所有标签都这样做,只对标签的子集执行此操作,并且必须在许多文件中执行此操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-17
  • 2011-07-11
  • 1970-01-01
  • 2013-12-09
  • 2015-12-09
相关资源
最近更新 更多