【问题标题】:Python: functions of built in BeautifulSoupPython:BeautifulSoup 内置函数
【发布时间】:2014-09-16 11:33:41
【问题描述】:

我想用 Beautiful Soup 来解析 html 文件。

我先做的:

from bs4 import BeautifulSoup

但我有错误:

from bs4 import BeautifulSoup
ImportError: No module named bs4

所以我只做了:

import BeautifulSoup

一切都很好。我的问题是:从bs4导入的BeautifulSoup和直接导入的有什么区别? bs4 是 python > 2.7 的内置库吗?

然后我做了:

data = url.openUrl("http://emma-watson.net")
self.soup = BeautifulSoup(data)
links = self.soup.find_all('a')

但我有一个错误:

links = self.soup.find_all('a')
TypeError: 'NoneType' object is not callable

但我不明白我的错误在哪里,因为我从文档中提取了这一行。像soup.find、soup.a、soup 这样的函数。 p 工作正常,那么这个函数有什么问题?

【问题讨论】:

  • 你已经安装了 bs3
  • 提示:soupself.soup 引用的值不同。
  • @Kevin 对不起,我的错误,但在我的代码中我有相同的 self.soup,但它仍然不起作用

标签: python python-2.7 html-parsing beautifulsoup


【解决方案1】:

bs4BeautifulSoup 是同一项目的不同的主要版本。两者都是需要单独安装的附加组件

  • bs4 是 BeautifulSoup 版本 4,当前主要版本。

  • BeautifulSoup至多是版本3,不再维护的版本;上一次发布是在 2 年前。

我推荐你安装 BeautifulSoup 4;它支持 Python 3、可插入解析器和 CSS 选择器语法,以及许多错误修复。 BeautifulSoup 4 还清理了所用方法的命名约定。请参阅version 4 documentation

在您的代码中,您使用的是 BeautifulSoup 4 语法; BeautifulSoup 3 将此解释为搜索第一个标签 <find_all> 并返回 None,因为它没有找到任何标签。它会对它无法识别的任何属性执行此操作。

在 BeautifulSoup 3 中,您必须改用 soup.findAll()

【讨论】:

  • @感谢您对 bs4 和 bs3 的解释。但我也做了一个编辑,因为在这里写代码我只是忘了在汤之前添加'self',但在我的代码中它是相同的但仍然不起作用
  • @Rop:问题出在方法的拼写上; BeautifulSoup 3 中没有 find_all 方法。
猜你喜欢
  • 2019-04-07
  • 2017-11-27
  • 2019-05-27
  • 1970-01-01
  • 2013-10-30
  • 2021-07-03
  • 2018-05-23
  • 2013-05-26
  • 1970-01-01
相关资源
最近更新 更多