Lxml是基于 libxml2解析库的Python封装。libxml2是使用C语言编写的,解析速度很好,不过安装起来稍微有点复杂。安装说明可以参考(http: //Lxml.de/installation.html),在CentOS7上中文安装说明(http://www.cjavapy.com/article/64/),使用lxml库来解析网络爬虫抓取到的HTML是一种非常高效的方式。lxml的html模块特别适合处理HTML内容,它可以快速解析大型HTML文件,并提供XPath和CSS选择器来查询和提取数据。
参考文档:Python通过Lxml库解析网络爬虫抓取到的html-CJavaPy
一、可能不合法的html标签解析
从网络上抓取到的html的内容,有可能都是标准写法,标签什么的都闭合,属性也是标准写法,但是有可能有的网站的程序员不专业,这样抓到的html解析就有可能有问题,因此,解析时先将有可能不合法的html解析为统一的格式。避免为后续的解析造成困扰。
1、lxml.html
lxml.html
是专门用于解析和处理HTML文档的模块。它基于lxml.etree
,但是为HTML文档的特点做了优化。lxml.html
能够处理不良形式的HTML代码,这对于解析和爬取网页尤其有用。
>>> import lxml.html
>>> broken_html = '<ul class=body><li>header<li>item</ul>'
>>> tree = lxml.html.fromstring(broken_html) #解析html
>>> fixed_html = lxml.html.tostring(tree,pretty_print=True)
>>> print fixed_html
<ul class="body">
<li>header</li>
<li>item</li>
</ul>
2、lxml.etree
lxml.etree
是lxml
库中用于处理XML文档的模块。它基于非常快的XML解析库libxml2,提供了一个类似于标准库xml.etree.ElementTree
API的接口,但是在性能和功能性方面要更加强大。lxml.etree
支持XPath、XSLT、和Schema验证等高级XML特性。
>>> import lxml.etree
>>> broken_html = '<ul class=body><li>header<li>item&