我想使用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,汤这样的功能。 p工作正常,所以这个功能有什么问题?
答案 0 :(得分:2)
bs4
和BeautifulSoup
是同一项目的不同主要版本。两者都是附加模块,您需要单独安装。
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()
。