三种数据解析方式
Posted daizongqi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三种数据解析方式相关的知识,希望对你有一定的参考价值。
第一种:xpath
使用流程:
- 下载:pip install lxml
- 导包:from lxml import etree
- 创建etree对象进行指定数据的解析
本地:etree=etree.parse(‘本地文件路径‘)
etree.xpath(‘xpath表达式‘)
网络:etree=etree.html(‘网络请求到的页面数据‘)
etree.xpath(‘xpath表达式‘)
案例:
test.html
<html lang="en"> <head> <meta charset="UTF-8" /> <title>测试</title> </head> <body> <div> <p>百里守约</p> </div> <div class="song"> <p>李清照</p> <p>王安石</p> <p>苏轼</p> <p>柳宗元</p> <a href="http://www.song.com/" title="赵匡胤" target="_self"> <span>this is span</span> 宋朝是最强大的王朝,不是军队的强大,而是经济很强大,国民都很有钱</a> <a href="" class="du">总为浮云能蔽日,长安不见使人愁</a> <img src="http://www.baidu.com/meinv.jpg" alt="" /> </div> <div class="tang"> <ul> <li><a href="http://www.baidu.com" title="qing">清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村</a></li> <li><a href="http://www.163.com" title="qin">秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山</a></li> <li><a href="http://www.126.com" alt="qi">岐王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君</a></li> <li><a href="http://www.sina.com" class="du">杜甫</a></li> <li><a href="http://www.dudu.com" class="du">杜牧</a></li> <li><b>杜小月</b></li> <li><i>度蜜月</i></li> <li><a href="http://www.haha.com" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a></li> </ul> </div> </body> </html>
练习:
from lxml import etree #xpath函数返回的总是一个列表 #创建etree对象进行指定数据解析 tree = etree.parse(‘./test.html‘)#./表示当前路径 #属性定位:根据指定的属性定位到指定的节点标签 #tree.xpath(‘//div[@class="song"] ‘)#//表示相对路径,所有子代节点,不用考虑是否直接子节点 #层级索引定位 #tree.xpath(‘//div[@class="tang"]/ul/li[2]/a‘) #逻辑定位 #tree.xpath(‘//a[@href="" and @class="du"]‘) #模糊查询 #tree.xpath(‘//div[contains(@class, "ng")]‘) #tree.xpath(‘//div[starts-with(@class, "ta")]‘) #取文本 #tree.xpath(‘//div[@class="song"]/p[1]/text()‘) #/text()获取当前标签中直系存储的文本数据 #tree.xpath(‘//div[@class="tang"]//text()‘) #//text()获取某一个标签下所有子标签中存储的文本数据 #取属性 # tree.xpath(‘//div[@class="tang"]//li[2]/a/@href‘) #/表示绝对路径,从根节点选取 #.表示选取当前节点 #..表示选取当前节点的父节点 #@表示 选取属性
以上是关于三种数据解析方式的主要内容,如果未能解决你的问题,请参考以下文章