我今天在和BeautifulSoup一起工作时遇到了一个非常奇怪的行为。在
让我们看一个非常简单的html片段:
<html><body><ix:nonfraction>lele</ix:nonfraction></body></html>
我试图用BeautifulSoup获取<ix:nonfraction>
标记的内容。在
使用find
方法时一切正常:
但是,当尝试使用find_all
方法时,我希望返回一个包含这个元素的列表,事实并非如此!在
soup.find_all('ix:nonfraction')
>>> []
实际上,find_all
似乎每次在我要搜索的标记中出现冒号时都会返回一个空列表。在
我已经能在两台不同的计算机上重现这个问题。在
有人有解释吗,更重要的是,有解决办法吗?
我需要使用find_all
方法,因为我的实际情况要求我在整个html页面上获取所有这些标记。在
@yosemite_k的解决方案之所以有效,是因为在bs4的源代码中,它跳过了导致这种行为的特定条件。事实上,你可以做很多不同的改变来产生同样的结果。示例:
下面是beautifulsoup源代码的一个片段,显示了调用}时发生的情况。您将看到
^{pr2}$find
或{find
只是用limit=1
调用find_all
。在_find_all
中,它检查条件:如果它达到了这个条件,那么它最终可能会变成这样:
如果它到达那里,那么它将重新分配
name
:这就是你行为不同的地方。只要
find_all
不满足任何前面的条件,那么就可以找到元素。在美化组4==4.6.0
FindAll Documentation
保留标记名为空并使用ix作为属性。在
效果很好
EDIT:“ix:nonfraction”不是标记名,因此汤。找到所有(“ix:nonfraction”)为不存在的标记返回了一个空列表。在
相关问题 更多 >
编程相关推荐