xpath解析
-
xpath解析:最常用且最便捷高效的一种解析方式。具有通用性。
- xpath解析原理:
- 1.实例化一个etree对象,且需要将被解析的页面源码数据加载到该对象中。
- 2.调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获。 - 环境的安装
pip install lxml
lxml是一种处理xml和html的python语言,也是一种解析库 - 如何实例化一个etree对象 from lxml import etree
- 1.将本地html文档中的源码数据加载到etree对象中
etree.parse(filepath)
- 2.可以从互联网上获取源码数据加载到etree对象中
etree.HTML(‘page_text’)#响应的网页源码
- xpath(‘xpath表达式’) - xpath表达式(层级)
-/:表示的是从根结点开始定位。一个/表示一个层级。
-//:表示的是多个层级。可以从任意位置开始定位。
-属性定位://meta[@charset=“utf-8”]
通用写法://tag[@attrName=“attrValue”]
-索引定位://tag[@attrName=“attrValue”]/tag[n]索引是从1开始的
-取文本:/text():获取的是标签中直系的文本内容
//text():获取的是标签中非直系的文本内容
-取属性:/@attrName
- xpath解析原理:
a = tree.xpath('//meta')
print(a)
a = tree.xpath('//meta[@charset="utf-8"]')
print(a)
问题阐述:
使用lxml.etree.parse()解析html文件,该方法默认使用的是“XML”解析器,所以如果碰到不规范的html文件时就会解析错误,报错代码如下:
问题解决:
自己创建html解析器,增加parser参数
parser = etree.HTMLParser(encoding="utf-8")
tree = etree.parse('yemian.html',parser=parser)
修改后代码:
from lxml import etree
if __name__ == '__main__':
#1.实例化一个etree对象,且将本地html文档中的源码数据加载到该对象中
parser = etree.HTMLParser(encoding="utf-8")
tree = etree.parse('yemian.html',parser=parser)
#2.xpath表达式实现标签定位,获取到的是一个Elemnet的列表
r = tree.xpath('/html/head/title')
print(r)
运行结果: