Python 的 lxml 模块是一个非常好用且性能高的HTML、XML解析工具,通过它解析网页,爬虫就可以轻松的从网页中提取想要的数据。lxml是基于C语言的libxml2和libxslt库开发的,所以速度是相当的快。
使用lxml提取网页数据的流程
要从网页里面提取数据,使用lxml需要两步:
第一步,用lxml把网页(或xml)解析成一个DOM树。这个过程,我们可以选择etree、etree.HTML 和 lxml.html 这三种来实现,它们基本类似但又有些许差别,后面我们会详细讲到。
第二步,使用xpath遍历这棵DOM 树,找到你想要的数据所在的节点并提取。这一步要求我们对xpath规则比较熟练,xpath规则很多,但别怕,我来总结一些常用的套路。
生成DOM树
上面我们说了,可以有三种方法来把网页解析成DOM树,有选择困难症的同学要犯难了,选择那种好呢?别急,我们逐一探究一下。下面我通过实例来解析一下下面这段html代码:
item_1
item_2
item_3
使用etree.fromstring()函数
先看看这个函数的说明(docstring):In [3]: etree.fromstring?
Signature: etree.fromstring(text, parser=None, *, base_url=None)
Call signature: etree.fromstring(*args, **kwargs)
Type: cython_function_or_method
String form:
Docstring:
fromstring(text, parser=None, base_url=None)
Parses an XML document or fragment from a string. Returns the
root node (or the result returned by a parser target).
To override the default parser with a different parser you can pass it to
the ``parser`` keywo