xpath解析数据
xpath解析数据
"""
xpath 也是一种用于解析xml文档数据的方式
xml path
w3c xpath搜索用法 在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或称为根节点)。都要用/
""" doc = """
<?xml version="1.0" encoding="ISO-8859-1"?>
<html>
<body>
<bookstore id="test" class="ttt"> <book id= "1" class = "2">
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book> <book id = "2222222222222">11111111111111111111
<title lang="abc">Learning XML</title>
<price>39.95</price>
</book> </bookstore>
<a></a>
</body>
</html>
""" from lxml import etree
html = etree.HTML(doc)
print(html.xpath("/bookstore")) # 从根标签找所有匹配的 列表形式
print(html.xpath("//bookstore")) # 全文中找所有匹配的 列表形式 # 通配符 *
print(html.xpath("//book")) #全文中找所有book标签
print(html.xpath("//*")) # 全文中找所有标签 # 获取属性
print(html.xpath("//bookstore/@id")) #获取id属性
print(html.xpath("//bookstore/@*")) #获取所有属性 # 嵌套
print(html.xpath("//bookstore/book/title/text()")) ==============================================================================
# 加上谓语(条件) # 指定要获取的索引
# print(html.xpath("//bookstore/book[1]/title/text()")) # 获取第一个
# print(html.xpath("//bookstore/book[last()-1]/title/text()")) # last() 最后一个 last()-1 倒数第二个
# print(html.xpath("//bookstore/book[position()>1]/title/text()")) # 索引大于1的 # xpath 原生 既能查找属性 又能查找标签 而在selenium只能查找标签
# 查找price的值大于30的book标签
# e = html.xpath("//book[price > 30]")[0]
# print(e.text) # 访问文本 不包含子标签的文本 只包含自己标签的文本
# print(e.attrib) # 访问属性 # 用属性来作限制
# 只要存在lang属性即可
print(html.xpath("//*[@lang]")) # 找的是具备lang并且值为abc的标签
print(html.xpath("//*[@lang='abc']"))
#获取其属性
print(html.xpath("//*[@lang='abc']")[0].attrib) # 只要 有属性即可
print(html.xpath("//*[@*]")) # 多个匹配条件
print(html.xpath("//title|//price")) ==================================================================================
# 轴匹配 (先拿到一个标签 在相对这个标签找其他标签) print(html.xpath("//bookstore/ancestor::*")) # 所有先辈
print(html.xpath("//bookstore/ancestor::body")) # 所有叫body的先辈
print(html.xpath("//bookstore/ancestor-or-self::*")) # 所有先辈包含他自己 # 获取属性
print(html.xpath("//bookstore/attribute::id"))
print(html.xpath("//bookstore/@id")) # 所有子级标签(只有子级)
print(html.xpath("//bookstore/child::*")) # 所有后代标签
print(html.xpath("//bookstore/descendant::*")) # 在这个标签后面的所有标签 与层级无关
print(html.xpath("//book[1]/following::*")) #第一个book后的所有标签 # 获取弟弟们(他后面的同级标签)
print(html.xpath("//book[1]/following-sibling::*")) # 获取哥哥们(它前面的同级标签)
print(html.xpath("//book[1]/preceding-sibling::*")) # 获取父级
print(html.xpath("//book[1]/parent::*")) # 获取既有id属性 又有class属性的标签
print(html.xpath("//*[@id and @class]"))
xpath解析数据的更多相关文章
- 爬虫系列二(数据清洗--->xpath解析数据)
一 xpath介绍 XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航. XPath 使用路径表达式在 XML 文档中进行导航 XPath 包 ...
- iOS 抓取 HTML ,CSS XPath 解析数据
以前我们获取数据的方式都是使用 AFN 来 Get JSON 数据,比如 点我查看 JSON 数据.http://news-at.zhihu.com/api/4/news/latest 但例如下面的百 ...
- 万方数据知识平台 TFHpple +Xpath解析
试了一下.基本上适合全部的检索结果. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loadi ...
- 解析数据(正则,xpath)
正则表达式拆分 import re # 1.拆分字符串 one = 'asdsfsgsh' # 标准 是 s 为拆分 pattern = re.compile('s') result = patter ...
- 数据的查找和提取[2]——xpath解析库的使用
xpath解析库的使用 在上一节,我们介绍了正则表达式的使用,但是当我们提取数据的限制条件增多的时候,正则表达式会变的十分的复杂,出一丁点错就提取不出来东西了.但python已经为我们提供了许多用于解 ...
- python爬虫使用xpath解析页面和提取数据
XPath解析页面和提取数据 一.简介 关注公众号"轻松学编程"了解更多. XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言.X ...
- 利用XPath解析带有xmlns的XML文件
在.net中,编写读取xml 的程序中提示"未将对象引用设置到对象的实例",当时一看觉得有点奇怪.为什么在读取xml数据的时候也要实例化一个对象.google了才知道,xml文件中 ...
- xpath 解析 及案例
xpath解析 编码流程: 1.实例化一个etree对象,且将页面源码加载到该对象中 2.使用xpath函数,且在函数中必须作用一个xpath表达式进行标签的定位 3.使用xpath进行属性和文本的提 ...
- Scrapy基础(六)————Scrapy爬取伯乐在线一通过css和xpath解析文章字段
上次我们介绍了scrapy的安装和加入debug的main文件,这次重要介绍创建的爬虫的基本爬取有用信息 通过命令(这篇博文)创建了jobbole这个爬虫,并且生成了jobbole.py这个文件,又写 ...
随机推荐
- python中剔除字典重复项,可以使用集合(set)。
使用集合(set)剔除字典中的重复项(value). 1)具体例子: #甲乙丙丁使用的编程语言programming_languages = { '甲':'java', '乙':'python', ' ...
- 【C++】子序列匹配问题
/* 一个串的“子序列”(subsequence)是将这个串中的一些字符提取出来得到一个新串,并且不改变它们的相对位置关系.例如,串"XDoi","XianYu!&quo ...
- CentOS7 使用systemctl来管理服务
1.建立service文件 以tomcat为例 , 建立tomcat.service文件 #服务说明 [Unit] #服务描述 Description=Tomcat Service #前置需要启动的服 ...
- webpack4.27.1中遇到的错误
1:ERROR in Entry module not found: Error: Can't resolve './src' 我在使用webpack命令时报错,这时因为我的配置文件有问题webpac ...
- Lock和Synchronized
1.synchronized无法判断是否获取锁的状态,Lock可以判断是否获取锁2.Lock中的某些锁允许对共享资源的并发访问,如ReadWriteLock读写锁,readLock()获取读锁,wri ...
- main.js中封装全局登录函数
1. 在 main.js 中封装全局登录函数 通过 vue 对象的原型扩展,可以扩展一个函数,这样这个函数就可以在每一个界面通过类似指向对象的方式,去访问这个函数. 如下是 main.js 扩展的函数 ...
- TCP/IP ARP
ARP(Address Resolution Protocol)地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议. 当在同一网络段内或同一子网内,主机发送信息时将包含目标IP地址的ARP ...
- 【长文】Google面试官分步解析自己泄漏前的面试题,超多干货和建议
本文翻译自Google工程师/面试官Alex Golec的文章:Google Interview Questions Deconstructed: The Knight's Dialer:翻译:实验楼 ...
- CF 219D 树形DP
CF 219D [题目链接]CF 219D [题目类型]树形DP &题意: 给一个n节点的有向无环图,要找一个这样的点:该点到其它n-1要逆转的道路最少,(边<u,v>,如果v要到 ...
- [macOS] finder变慢提速
原文地址:http://ntfs-formac.com/fix-slow-finder-macos-sierra/ 我采取的是第二种方法,够简单,直接在终端执行 rm ~/Library/Caches ...