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示例不起作用?

使用 iText 提取文本不起作用:编码或加密文本?

MDCardSwipe 滑动功能不起作用

为啥 pop to root 在这个示例代码 SwiftUI 中不起作用?

Beautifulsoup4学习文档解析流程图

python相对导入示例代码不起作用[重复]