浅析Beautiful Soup库和Lxml库
来源:互联网 发布:mysql自定义函数 编辑:程序博客网 时间:2024/06/17 02:52
众所周知,Beautiful Sou和Lxml是两个非常流行的python模块,他们常被用来对抓取到的网页进行解析,以便进一步抓取的进行。作为一个爬虫爱好者,今天我来简单讲讲这两个库各自的优点和不足,不对的地方还请各位大神斧正。
Beautiful Soup模块可以用来解析网页,并提供定位内容的便捷接口,可以用下面的命令安装其最新版本。
>>>pip install beautifulsoup4
使用bs4库的第一步是将以下载的HTML内容解析为soup文档,例如以下为一个简单的HTML文件,存在属性值两侧引号缺失和标签未闭合的问题。
<ul class=wgxshr>
<li>height
<li>weight
</ul>
使用bs4库进行处理
>>>from bs4 import BeautifulSoup
>>>broken_html = '<ul class=wgxshr><li>height<li>weight</ul>'
>>>soup = BeautifulSoup(broken_html, 'html.parser')
>>>fixed_html = soup.prettify()
>>>print fixed_html
<html>
<body>
<ul class="wgxshr">
<li>height</li>
<li>weight</li>
</ul>
</body>
</html>
从上面的执行结果可以看出来,BeautifulSoup 能够正确的解析缺失的引号并闭合标签,此外还添加了<html>和<body>标签使其成为完整的HTML文档,然后可以使用find()和find_all()方法定位我们需要的元素。
但是,需要注意的是,由于这里使用的是python内置库,由于不同的版本容错能力不同,这里解析出来的HTML文件可能是错误的,即weight列表项被解析为height列表项的子元素,而这种错误在实践中很难被发现。另外,由于bs4是python的原生库,相比lxml的libxml2+libxslt的原生C代码慢很多。
lxml是另一个python爬虫的常用库,它是基于libxml2这一XML解析库的python封装,速度比BeautifulSoup快。使用lxml的第一步也是将有可能不合法的HTML解析为同一格式。例如:
>>>import lxml.html
>>>broken_html = '<ul class=wgxshr><li>height><li><weight></ul>'
>>>tree = lxml.html.fromstring(broken_html)
>>>fixed_html = lxml.html.tostring(tree, pretty_print=True)
>>>print fixed_html
<ul class="wgxshr">
<li>height</li>
<li>weight</li>
</ul>
同样的,lxml也可以正确解析属性两侧缺失的引号,并闭合标签,但是没有像BeautifulSoup库那样添加额外的<html>和<body>标签。lxml提供了几种不同的不同的用来选择元素的方法,如xpath选择器,css选择器等。
相较于BeautifulSoup库,lxml更快且更健壮,一般来所,是抓取数据的最佳选择。
但bs4已经可以依赖于lxml,速度有了大幅度提升,健壮性也大大提高,可以直接soup = BeautifulSoup(html, 'lxml')了。
所以,编写爬虫程序时,究竟是使用正则表达式,,Beautiful Soup还是Lxml,就仁者见仁,智者见智了。
- 浅析Beautiful Soup库和Lxml库
- 爬虫---Beautiful Soup库
- Beautiful Soup 库入门
- Beautiful Soup库入门
- Beautiful Soup库入门
- Python Beautiful Soup库详解
- python3与Beautiful Soup库
- Mac下安装lxml及Beautiful Soup
- Beautiful Soup 安装以及lxml的安装
- python安装beautiful soup库,和requests库
- Python的html和xml解析库Beautiful Soup
- Python中Beautiful Soup库详细教程
- python beautiful soup库的用法
- 2、Beautiful Soup库(bs4)入门
- python中Beautiful Soup库使用详解
- 【Python】【爬虫】关于Beautiful Soup库
- Beautiful Soup 4库--python2.x(学习日记)
- Python中使用Beautiful Soup库的超详细教程
- 分布式的概念
- 关于QAxObject开发excel时出现的问题解决
- 51nod 1284 2 3 5 7的倍数(容斥原理)
- idea 导入eclipse maven项目
- 《操作系统》第8章:虚拟内存
- 浅析Beautiful Soup库和Lxml库
- Error running app:Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled问题解决
- crontab误删操作的恢复与防范
- 欢迎使用CSDN-markdown编辑器
- cf Educational Codeforces Round 20 E. Roma and Poker
- 查看CPU信息
- 2017 黑龙江省赛热身赛 C
- 三层架构
- 第十二周算法分析与设计: Find Largest Value in Each Tree Row