XPath数据解析
- xpath解析原理:
- ①:实例化一个etree对象,且需要将被解析的页面源码数据加载到该对象中
- ②:调用对象中的xpath方法,结合xpath表达式实现标签的定位和内容的捕获
- ③:环境安装
pip install lxml
- 如何实例化一个etree对象:
from lxml import etree
- ①:将本地的html文档当中的源码数据加载到etree对象中:
etree.parse(filePath)
- ②:可以将从互联网上获取的源码数据加载到该对象中:
etree.HTML('page_text')
- ③:
xpath('xpath表达式')
- xpath表达式
import requests
from lxml import etree
if __name__ == '__main__':
#UA伪装:将对应的User-Agent封装到一个字典中
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'
}
#实例化好了一个etree对象,且将被解析的源码加载到了该对象中
tree = etree.parse('soguo.html')
#xpath可以通过层级关系进行标签的定位
#第一个'/'表示的是从根结点开始定位,一个‘/’表示一个层级。
#//:表示可以从任意位置开始定位
#r = tree.xpath('//div[@class="pos-more"]')
#属性定位://div[@class="pos-more]" tag[@attrName="attrValue"]
#r = tree.xpth('//div[@class="pos-more"]/p[3]')#索引定位:获取div中的第三个p标签
#取文本:
r = tree.xpth('//div[@class="pos-more"]//li[5]/a/text()')[0]
#获取div下面两个层级第五个li标签中的p标签
#/text:标签中所有直系的文本内容
#//text:标签下的所有文本内容
print(r)
- 属性定位:
//div[@class="pos-more]" tag[@attrName="attrValue"]
- 索引定位:
//div[@class="pos-more"]/p[3]
索引数组从1开始 - 取文本:
- ①:/text()---->获取的是标签中直系的文本内容
- ②://text()----->标签中非直系的文本内容(所有的文本内容)
- 取属性:/@attrName ===>img/src