为什么使用BeautifulSoup时,把解析器换成pip install lxml出错就出错

python版本3.5.2 已安装lxml 报错结果:bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml. Do you need to install a parser library? 重新安装lxml和bs4仍然报错。补充:已解决问题,缺少libxslt。brew install libxslt
今天刚碰到的问题,我来回答吧.应该是lxml没有安装成功,测试lxml是否安装成功的方法:进入python3命令行,import lxmllxml在ubuntu下的安装方法:1.sudo apt-get install libxml2-dev libxslt-dev python-dev2.sudo pip3 install lxml
请看&br&&img src=&/6a3d626fadea915f0130dabea48be205_b.png& data-rawwidth=&867& data-rawheight=&616& class=&origin_image zh-lightbox-thumb& width=&867& data-original=&/6a3d626fadea915f0130dabea48be205_r.png&&
其实用python3.5自带的网页解析器也可以达到很理想的效果&br&&img data-rawheight=&509& data-rawwidth=&1155& src=&/c3cd34f93fb2467dac0824321eaaa3f2_b.png& class=&origin_image zh-lightbox-thumb& width=&1155& data-original=&/c3cd34f93fb2467dac0824321eaaa3f2_r.png&&只是html.parser的解析效果没有lxml好,快。&br&猜测题主windows系统,这里安利一个windows系统下安装lxml的方法:&br&&br&(一) &u&&b&首先安装wheel&br&&/b&&/u&命令行执行&br&&div class=&highlight&&&pre&&code class=&language-text&&pip install wheel
&/code&&/pre&&/div&(二)下载相应版本的lxml后缀为.whl的文件&br&&a class=& wrap external& href=&///?target=http%3A//www.lfd.uci.edu/%7Egohlke/pythonlibs/%23lxml& target=&_blank& rel=&nofollow noreferrer&&www.lfd.uci.edu/~gohlke/pythonlibs/&i class=&icon-external&&&/i&&/a&&br&(三)安装lxml&br&进入lxml下载的根目录,按住shift然后鼠标右键选择&b&&u&在此处打开命令行窗口&br&&/u&&/b&&br&&div class=&highlight&&&pre&&code class=&language-text&&pip install lxml_文件名.whl
&/code&&/pre&&/div&(四)检验安装成功与否&br&任意处打开命令行窗口&br&&div class=&highlight&&&pre&&code class=&language-text&&python 回车
&/code&&/pre&&/div&&div class=&highlight&&&pre&&code class=&language-text&&import lxml
&/code&&/pre&&/div&如果没有报错就安装成功了!
其实用python3.5自带的网页解析器也可以达到很理想的效果 只是html.parser的解析效果没有lxml好,快。 猜测题主windows系统,这里安利一个windows系统下安装lxml的方法: (一) 首先安装wheel 命令行执行 pip install wheel
(二)下载相应版本的lxml后缀为…
已有帐号?
无法登录?
社交帐号登录扫一扫关注官方微信Service Unavailable
Service Unavailable
HTTP Error 503. The service is unavailable.关于BeautifulSoup的总结 - 简书
下载简书移动应用
写了39453字,被69人关注,获得了109个喜欢
关于BeautifulSoup的总结
最近一直在用BeautifulSoup,但是语法很容易忘记。在这里做个学习总结吧。
BeautifulSoup是用来从HTML或XML中提取数据的Python库。
使用方法:from bs4 import BeautifulSoupsoup = BeautifulSoup(html)
soup使用Unicode编码。
有四种类型:Tag,NavigableString,BeautifulSoup,Comment。BeautifulSoup将文档转化为树形结构,每个节点都是上述四种类型的Python对象。
与XML和HTML中Tag对象相同。如:soup = BeautifulSoup(&b class="boldest"&Extremely bold&/b&)soup.b就是一个Tag对象。
Nametag.name
可获取,可更改
Attribute一个Tag对象可以有多个属性,操作方法和字典相同,如上述Tag对象b就有一个class属性:soup.b['class']或者使用get方法soup.b.get('class')
获取所有属性键值对:soup.b.attrs
tag的属性可添加、删除(del soup.b['class'])、修改,和字典方法相同。
如果一个属性key对应多个value,则返回一个value的list,如:css_soup = BeautifulSoup('&p class="body strikeout"&&/p&')css_soup.p['class']输出:["body", "strikeout"]
这种多个值的属性是需要在HTML中有定义的,如果并没有被定义为多值属性,则返回字符串:id_soup = BeautifulSoup('')id_soup.p['id']输出'my id'如果转换的是XML文档,则不会存在多值属性,返回字符串。
可以使用list或字符串对属性赋值。
2. NavigableString
Tag中的字符串即为NavigableString对象。tag.string在BeautifulSoup之外使用该类型,推荐转换为Unicode:unicode(Tag.string)
tag中包含的字符串不可编辑,只能替换:tag.string.replace_with(new string)
tag能够包含其他tag或字符串,而NavigableString则不能包含其他对象。不支持.content,.string,find(),只支持部分遍历文档树和搜索文档树中的属性。
3. BeautifulSoup
表示的是一个文档的全部内容,大部分情况可当做Tag对象,支持遍历文档树和搜索文档树的大部分属性。而在HTML或XML中并没有叫做BeautifulSoup的Tag,所以并没有name和attribute属性,但是有个特殊属性:soup.name输出u'[document]'
4. Comment
Comment类型是NavigableString类型的子类,BeautifulSoup中也有同样道理的一些其他类型。
遍历文档树
BeautifulSoup对象作为一棵树,有多个节点。对于一个节点,相对于它所在的位置,有子节点、父节点、兄弟节点。
一个Tag可包含多个Tag以及字符串,这些都是这个Tag的子节点。而NavigableString不会有子节点。
如果想要获得某个Tag,上述已提到方法:soup.tag_name通过点取属性,只能获得当前名字的第一个tag,若要获取所有,需要使用搜索文档树中的方法:soup.find_all('tag_name')
tag的.contents属性可将所有子节点以列表的方式输出。可通过tag的.children生成器,对所有子节点进行遍历。
.contents和.children只对获取Tag的直接子节点,.descendants可用于对Tag的所有子孙节点进行遍历。
如果tag只有一个NavigableString类型子节点,则可用.string获取。如果包含多个,使用.strings遍历。若输出的字符串中包含空格或空行,使用.stripped_strings去除。
当前节点的父节点:.parent当前节点的所有父辈节点:.parents
3. 兄弟节点
拥有同一父节点的节点之间。.next_sibling.previous_sibling同理,所有兄弟节点:.next_siblings.previous_siblings
指向下一个或上一个解析对象:.next_element.previous_element.next_elements.previous_elements
搜索文档树
经常使用的两种方法:find(str)和find_all(str)。其中的str,代表了tag的name。可以是纯字符串、正则表达式、列表(任一匹配就满足条件,是或运算)、True(返回所有Tag节点不返回字符串节点)。
另一种入参不是str,而是method。此方法是一个函数,只接受一个元素入参,若此函数返回True表示入参匹配要求。例如:def has_class_but_no_id(tag): return tag.has_attr('class') and not tag.has_attr('id')
综上,过滤器包括:纯字符串、正则表达式、列表、True、方法这几种。
1. find_all(name,attrs,recursive,text,**kwargs)
该方法搜索当前节点的所有tag子节点。
name参数:指的是tag的name属性,字符串对象自动忽略。过滤器可以使用全部种类。
keyword参数:如果一个入参指定了名字,但是并不是上述提到的入参名字,搜索时会把该入参当做是tag的属性来搜索。例如:soup.find_all(id='link2')会返回tag中存在属性id,并且id对应的值是link2的tag。以上方法可使用除方法之外的所有过滤器。
某些特殊属性不能这样直接使用,则使用如下方法:soup.find_all(attrs={"key":"value"})
例如要使用class属性进行搜索,由于class是python中的保留字,不能直接写成入参,目前有两种方法:soup.find_all('tag.name',class_='class_value')soup.find_all('tag.name',attrs={'class':'class_value'})class_方法可以使用全部过滤器。另外,因为class是一个多值属性,所以只需要匹配一个值,就可以得到结果,所谓的不完全匹配。使用完全匹配时,过滤器中的字符顺序需要和实际相符合才能得到对应结果。
text参数:搜索的是Tag中的字符串内容,可使用全部过滤器。
limit参数:限制返回数量。
recursive参数:find_all()默认是搜索当前节点的所有子孙节点,若只需要搜索直接的子节点,则设置recursive=False。
find_all()是实际当中用的最广泛的。因此有了等价的简化版:soup.find_all('a')soup('a')
2. find(name,attrs,recursive,text,**kwargs)
find()方法等价于find_all(limit=1),返回符合条件的第一个对象。区别在于,前者直接返回结果,后者返回只有一个元素的列表。若没有对象符合条件,前者返回None,后者返回空列表。
它也有简化版:soup.find('head').find('title')soup.head.title
除了find()和find_all()之外还有一些搜索的方法:find_parent()find_next_sibling()find_previous_sibling()上面三种可以在后面加's'表示所有。find_next()find_previous()find_all_next()find_all_previous()
3. CSS选择器
Tag或BeautifulSoup对象的.select()方法。
修改文档树
prettify()将文档树格式化之后输出。若不注重格式,则可使用python的str()或unicode()。
如果想得到tag中包含的文本内容,使用get_text(),可获取到当前节点的文本,以及子孙节点中的文本。返回的是Unicode。可以指定参数设置分隔符如get_text("|")是以“|”作为分隔符。get_text(strip=True)可去除文本前后的空白。或者用.stripped_strings进行遍历。
文档解析器
BeautifulSoup的第一个入参是文档,第二个入参是文档解析器,默认情况下的优先顺序是:lxml, html5lib,python标准库。其中只有lxml支持xml文档的解析。
soup使用Unicode编码。BeautifulSoup进行了编码检测并自动转为Unicode。BeautifulSoup对象的.original_encoding属性来获取自动识别编码的结果。当然这样比较慢,有时候会出错。可以在创建BeautifulSoup对象时,指定入参from_encoding来告知文档的编码方式。
有时候转码时有些特殊字符替换成了特殊的Unicode,可通过BeautifulSoup对象的.contains_repalcement_characters属性来判断是否有此情况,为True即为有特殊替换。
输出编码统一为UTF8,若想要其他的编码,则和一般的python字符串相同,需要进行手动设置。
使用chartdet库可提高编码检测效率。
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
被以下专题收入,发现更多相似内容:
如果你是程序员,或者有一颗喜欢写程序的心,喜欢分享技术干货、项目经验、程序员日常囧事等等,欢迎投稿《程序员》专题。
专题主编:小...
· 177238人关注
Write the Code, Change the World, 改变世界从编程开始, 收集编程相关的干货
· 11767人关注
Pythoner的集中营, 收集关于Python的各种知识教程.
推荐文章和系列阅读:
1. Python 零基础入门资料...
· 8860人关注
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
选择支付方式:BeautifulSoup提示找不到lxml解析包的解决方法 - 博客频道 - CSDN.NET
Sugar的专栏
分类:Python
BeautifulSoup自带的解析器里面没有xml和lxml,需要我们额外安装。
网上搜了下,发现下面几个好网址:
在搜索lxml库下载对应的安装包就可以了,exe安装就是方便。
abclixu123
排名:第3206名
(17)(17)(1)(6)(3)(3)(2)(3)(2)(26)(2)(45)(10)(9)(5)(12)(0)(3)(13)(3)(4)(7)(2)(1)

我要回帖

更多关于 beautifulsoup解析xml 的文章

 

随机推荐