常用函数
import lxml.etree # etree模块可以自动修正HTML文本
html = lxml.etree.HTML(text='') # 对HTML文本进行解析
from lxml.etree import HTMLParser
parser = HTMLParser()
html = lxml.etree.parse(source='path, str', parser=parser) # 读取文本文件进行解析
result = lxml.etree.tostring(element_or_tree=html) # 修正后的HTML代码
result.decode('utf-8') # 将‘byte’类型数据转换为‘str’类型
html.xpath('') # 选取特定节点

XPath语法
XPath运算符:or、and、mod、|、+、-、*、div、 =、!=、<、<=、>、>=
获取属性值:
/@attr:获取attr属性值
/attribute::* :获取所有属性值
获取节点文本:
/text():获取当前节点的文本
//text():获取子孙节点的文本
根据属性选取节点:
/@attr:选择带attr属性的所有节点
/node[@*]:选取带任意属性的node节点
/node[@attr="attr_value"]:选取attr属性值为attr_value的node节点
/node[contains(@attr, "attr_value")]:选取attr属性值包含attr_value的node节点
根据位置选取节点:
/* == /child::* :选取所有子结点
//* == /descendant::* :选取所有子孙节点
/following::*:选取之后的所有节点
/following-sibling::*:选取之后的所有兄弟节点
/.. == /parent::* :选取父节点
/ancestor::* :选取所有祖先节点
从多个匹配节点选取特定次序的节点:
/node['position, int']:选取匹配的第position个node节点
/node[last()]:选取匹配的最后一个node节点
/node[last()-'num, int']:选取匹配的最后num+1个node节点
/node[position()<'position, int']:选取匹配的位置小于position的node节点