当前位置: 首页 > 知识库问答 >
问题:

美丽的乌苏。儿童或儿童。标记之间没有空格的内容

梁和颂
2023-03-14

我希望一个标签的所有子项没有标签之间的空白。但是美丽的汤。内容。儿童也返回标记之间的空白。

from bs4 import BeautifulSoup
html = """
<div id="list">
  <span>1</span>
  <a href="2.html">2</a>
  <a href="3.html">3</a>
</div>
"""
soup = BeautifulSoup(html, 'html.parser')
print(soup.find(id='list').contents)

这张照片是:

['\n', <span>1</span>, '\n', <a href="2.html">2</a>, '\n', <a href="3.html">3</a>, '\n']

print(list(soup.find(id='list').children))

我想要的是:

[<span>1</span>, <a href="2.html">2</a>, <a href="3.html">3</a>]

有没有办法告诉BeautifulSoup只返回标签而忽略空白?

文档对此主题没有多大帮助。示例中的html在标记之间不包含任何空格。

事实上,去除html标记之间的所有空白可以解决我的问题:

html = """<div id="list"><span>1</span><a href="2.html">2</a><a href="3.html">3</a></div>"""

使用这个html,我得到的标签之间没有空格,因为标签之间没有空格。但是我希望使用BeautifulSoup,这样我就不必在html源代码中乱搞了。我希望BeautifulSoup能帮我做到这一点。

另一个解决方法可能是:

print(list(filter(lambda t: t != '\n', soup.find(id='list').contents)))

但这似乎有点离谱。是否保证空白总是精确地'\n'

重复标记团队的注意事项:

有很多关于美化组和空白的问题。大多数人都在询问如何从“渲染文本”中去除空白。

例如:

BeautifulSoup-消除段落空白/换行符

正在从python BeautifulSoup的输出中删除新行“\n”

这两个问题都希望文本没有空格。我想要没有空格的标签。那里的解决方案不适用于我的问题。

另一个例子:

使用Beautifulsoup的带空格类的正则表达式

这个问题是关于class属性中的空白。

共有1个答案

蔚承天
2023-03-14

BeautifulSoup有。find_all(True),返回标记之间不带空格的所有标记:

from bs4 import BeautifulSoup
html = """
<div id="list">
  <span>1</span>
  <a href="2.html">2</a>
  <a href="3.html">3</a>
</div>
"""
soup = BeautifulSoup(html, 'html.parser')
print(soup.find(id='list').find_all(True))

印刷品:

[<span>1</span>, <a href="2.html">2</a>, <a href="3.html">3</a>]

结合recursive=False,您只会得到直接子级,而不会得到子级的子级。

为了演示,我添加了

from bs4 import BeautifulSoup
html = """
<div id="list">
  <span>1</span>
  <a href="2.html"><b>2</b></a>
  <a href="3.html">3</a>
</div>
"""
soup = BeautifulSoup(html, 'html.parser')
print(soup.find(id='list').find_all(True, recursive=False))

使用recursive=False打印:

[<span>1</span>, <a href="2.html"><b>2</b></a>, <a href="3.html">3</a>]

使用recursive=True打印:

[<span>1</span>, <a href="2.html"><b>2</b></a>, <b>2</b>, <a href="3.html">3</a>]

琐事:现在我有了解决方案,我在StackOverflow中发现了另一个看似无关的问题和答案,该解决方案隐藏在一条评论中:

为什么美丽的乌苏。子元素包含无名元素以及预期的标记

 类似资料:
  • 有人知道我为什么会有这种行为吗?是我的代码出了bug还是什么问题?

  • 昨天我在我的项目中添加了,现在当我离开并回到导航中的元素时,它会重新加载Sky,我得到 警告:儿童(…):遇到两个具有相同密钥的子项,。子密钥必须是唯一的;当两个子项共享密钥时,将只使用第一个子项。 (上面使用的数字50只是一个例子,它每次抛出这个错误~40次,都是不同的id) 这个问题似乎源于我的文件: 因为每次我进入另一个屏幕时,这个组件都会卸载,然后在我回来时重新安装。 当完成时,创建了一组

  • 首先,一些上下文:我在我的JavaFX应用程序中有一个TreeView,有一个自定义的TreeCell实现。此实现添加了一个HBox,以显示标签(使用LabeledText)和右侧的一个(或多个)图标/状态指示器。标签和图标也会附加工具提示。当用风景视图检查时,结果是这样的: 如上图所示,一个单元格包含一个带有标签(LabeledText)、间距区域的HBox,在本例中还有一个图标(使用字体,因此

  • 我对gitlab ci子管道有问题。需要在具有多个应用程序的repo中的每次提交后自动触发ci管道。需要配置以检测哪些文件夹/文件被修改,以便知道要触发哪个应用程序管道 结构示例 Main“.gitlab ci.yml”是: appA1".gitlab-ci.yml"是: appA2“.gitlab ci.yml”是: 这种配置的目的是,例如,当我在应用**中更改文件时,管道会检测到更改并生成应用

  • 本文向大家介绍儿童python练习实例,包括了儿童python练习实例的使用技巧和注意事项,需要的朋友参考一下 实例一: 题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少? 程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列(只要百不等于十位并且不等于个位)。 实例(Python 2.0+) 实例二: 题目:企业发