我希望一个标签的所有子项没有标签之间的空白。但是美丽的汤。内容
和。儿童
也返回标记之间的空白。
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属性中的空白。
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+) 实例二: 题目:企业发