BeautifulSoup4文档示例不起作用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BeautifulSoup4文档示例不起作用相关的知识,希望对你有一定的参考价值。
我是BeautifulSoup4的新手并且非常集中地学习它。问题在于下一段代码(我在https://www.crummy.com/software/BeautifulSoup/bs4/doc/页面的文档中找到它,关于函数定义的文章):
def has_class_but_no_id(tag):
return tag.has_attr('class') and not tag.has_attr('id') (A)
soup.find_all(has_class_but_no_id)
我希望得到这样的结果(见文档):
# [<p class="title"><b>The Dormouse's story</b></p>,
# <p class="story">Once upon a time there were...</p>, (B)
# <p class="story">...</p>]
但我得到了下一个结果:
[<p class="title"><b>The Dormouse's story</b></p>, <p class="story">Once
upon a time there were three little sisters; and their names were
<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a> and
<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>, <p class="story">...</p>]
我检查了文档,发现只有方法.has_attr已被弃用。而且没有更多细节。如何更改初始代码(A)以获得预期结果(B)?任何人都可以帮忙解决这个问题吗?日Thnx。
答案
有用。您必须注意,列表中的第二个结果未在内部标记(子标记)中检查相同的条件。所以包装<p class="story">
已满足条件,并已被放在结果列表中,包含所有内容。
此结果列表:
[<p class="title"><b>The Dormouse's story</b></p>,
-------------------------
<p class="story">Once
upon a time there were three little sisters; and their names were
<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a> and
<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>,
-------------------------
<p class="story">...</p>]
包含三个标签,每个项目都有'class'attr而没有'id'attr。
另一答案
Doc说:
此函数仅选取'p'标签。它不会拾取'a'标签,因为这些标签同时定义了“class”和“id”。它不会选择'html'和'title'这样的标签,因为这些标签没有定义“class”。
soup.find_all(has_class_but_no_id)
# [<p class="title"><b>The Dormouse's story</b></p>,
# <p class="story">Once upon a time there were...</p>,
# <p class="story">...</p>]
目前还不清楚它会导致人们期望没有任何标签的结果。他们应该改变声明或例子。
以上是关于BeautifulSoup4文档示例不起作用的主要内容,如果未能解决你的问题,请参考以下文章
为什么官方文档中的Android Instrumented Test示例不起作用?