python笔记 lxml

  • lxml官方文档

这里记录一些常用的函数,但是不会记录它们的不常用参数

解析html

etree.HTML(text):etree包中的HTML函数可以用来解析字符串表示的HTML数据,返回的是一个lxml.etree._Element类型对象。
为什么可以直接通过包调用函数,因为这个函数被定义在__init__.py文件中。

etree.parse(StringIO(text),etree.HTMLParser())
第一个参数是file-like对象、表示本地文件的路径(str),或者是表示网络文件的URL(str)。
但是使用本地文件路径或者URL会发生乱码,目前我没有办法搞定。只能通过open函数或者requests.get获得字符串后转成StringIO。
第二个参数是解析器,必须要指定,因为默认的解析器不能解析HTML,不知道它默认的解析器是哪一个。
返回的对象是lxml.etree._ElementTree,调用该对象的getroot()方法后,获得lxml.etree._Element类型对象 。

etree.fromstring(text,etree.HTMLParser())
同样需要指定html解析器,返回的是lxml.etree._Element类型对象 。

lxml默认解析的文件格式是xml,也就是说它的parse函数和fromstring函数,不加手动指定解析器,默认就是用一个xml解析器。

输出html数据
print(etree.tostring(html,pretty_print=True,method="html",encoding='utf-8').decode('utf-8'))
etree的tostring可以输出整个xml/html文本,支持的类型包括lxml.etree._Elementlxml.etree._ElementTree
对于tostring返回的对象,需要调用它的decode方法,这个函数虽然名字叫tostring,返回的确实bytes 。
默认输出方式是xml,所以这里method必须手动指定为html,而encoding参数是必须要加的。

lxml.etree._ElementTree

表示一个xml或者HTML文件树 。

  • getroot():得到根节点
  • xpath():返回一个list,元素是lxml.etree._Element

lxml.etree._Element

xml/html文件树中的一个节点。
这是一个类似字典的类型,可迭代,有keys()、values()、items()等方法,这些作用于当前标签的属性
但是不能下标访问,你敢信!使用get(attr_name)来获取属性的值

  • getroottree():获得文件树
  • xpath():返回一定是一个list,元素是lxml.etree._Element
  • tag:当前节点标签名
  • text:当前节点包含的文本(必须是直接子文本节点,不能是子孙文本节点),没有就是None
  • tail:单一标签的文本
    才知道一个标签也能有文本的,比如

    中国

你可能感兴趣的:(python笔记 lxml)