数据解析_xpath
2024-09-05 23:55:07
重点推荐这种解析方式,xpath是最常用且最便捷高效的一种解析方式,通用性
1、解析原理
1、实例化一个etree的对象,且需要将被解析的页面源码数据加载到改对象中。
2、调用etree对象中的xpath方法结合表达式实现标签的定位和内容的捕获
2、环境的安装
1、pip install lxml (lxml是一种解析器)
3、如何实例化一个etree对象 from lxml import etree
1、将本地的html文档中的源码数据加载到etree对象中
etree.parse(filePath)
2、可以将从互联网上获取的源码数据加载到该对象中
etree.HTML('page_text')
4、xpath('xpath表达式')
-- /:表示的是从根节点开始定位,表示的是一个层级
-- //:表示的是多个层级,可以表示从任意位置开始定位
-- 属性定位://div[@class='sort'] tag[@attrName='attrValue']
--索引定位://div[@class='sort']/p[3] 索引从1开始的
-- 取文本 /text() 获取的是标签中直系的文本内容
//text() 获取的是所有后代的文本内容
-- 取属性 /@attrName /src
一个错误:
lxml.etree.XMLSyntaxError: Opening and ending tag mismatch: meta line 3 and head, line 3, column 87 解决办法:
自己创建html解析器,增加parser参数 from lxml import etree
parser = etree.HTMLParser(encoding="utf-8")
htmlelement = etree.parse("baidu.html", parser=parser)
print(etree.tostring(htmlelement, encoding="utf-8").decode("utf-8"))
原文链接:https://blog.csdn.net/Kwoky/java/article/details/81099697
import requests
from lxml import etree
if __name__ == '__main__':
parser = etree.HTMLParser(encoding="utf-8")
#实例化好了一个etree对象,且将被解析的源码加载到该对象中
tree = etree.parse('test2.html',parser=parser)
#r = tree.xpath('/html/head/title') #[<Element title at 0x27230787248>]
#r = tree.xpath('/html//title') #[<Element title at 0x222b0a57408>]
#r= tree.xpath('//li[@class="sort"]') #[<Element title at 0x25dd0f77048>]
#r = tree.xpath('//li[@class="sort"]/p[2]') # [<Element title at 0x25dd0f77048>]
r = tree.xpath('//li[@class="sort"]//a/text()')
print(r) #[<Element li at 0x135d9b37448>]
最新文章
- 使用Junit对Spring进行单元测试实战小结
- PyMongo下载及安装
- Ninth scrum meeting - 2015/11/3
- C语言内存对齐详解(3)
- .NET本质论(4)应用程序对象HttpApplication
- C 基于socket实现简单的文件传输
- Java连接oracle数据库的OCI和THIN
- Android实例-调用系统APP(XE10+小米2)
- 转载 .htaccess文件RewriteRule语法规则
- javascript cookie 操作
- 得到当前堆栈信息的两种方式(Thread和Throwable)的纠结
- mvn export runnable jar
- 误删除了Oracle的dbf文件后的解决方法
- [GitPython]使用python管理你的git库
- [LeetCode141]Linked List Cycle
- java深拷贝和浅拷贝
- centos7 源码安装php7
- Tcp三次挥手和四次挥手
- Azure ARM (18) 将Azure RM Manage Disk托管磁盘的Image,跨订阅迁移
- Linux版本CentOS、Ubuntu和Debian的异同
热门文章
- Java实现 蓝桥杯VIP 算法提高 超级玛丽
- Java实现 LeetCode 168 Excel表列名称
- Java实现 LeetCode 120 三角形最小路径和
- 【JAVA习题二十八】海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
- iOS -实现imageView中的button响应点击事件的方法
- String Problem(模板)【最短路】
- 网页中为什么常用AT替换@(repost from https://zhidao.baidu.com/question/122291.html)
- f(t) = t的傅里叶系数
- VMware历史版本下载【1.0~3.0】
- Day8-微信小程序实战-交友小程序-首页用户列表渲染及多账号调试及其点赞功能的实现