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解析数据的更多相关文章

  1. 爬虫系列二(数据清洗--->xpath解析数据)

    一 xpath介绍 XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航. XPath 使用路径表达式在 XML 文档中进行导航 XPath 包 ...

  2. iOS 抓取 HTML ,CSS XPath 解析数据

    以前我们获取数据的方式都是使用 AFN 来 Get JSON 数据,比如 点我查看 JSON 数据.http://news-at.zhihu.com/api/4/news/latest 但例如下面的百 ...

  3. 万方数据知识平台 TFHpple +Xpath解析

    试了一下.基本上适合全部的检索结果. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loadi ...

  4. 解析数据(正则,xpath)

    正则表达式拆分 import re # 1.拆分字符串 one = 'asdsfsgsh' # 标准 是 s 为拆分 pattern = re.compile('s') result = patter ...

  5. 数据的查找和提取[2]——xpath解析库的使用

    xpath解析库的使用 在上一节,我们介绍了正则表达式的使用,但是当我们提取数据的限制条件增多的时候,正则表达式会变的十分的复杂,出一丁点错就提取不出来东西了.但python已经为我们提供了许多用于解 ...

  6. python爬虫使用xpath解析页面和提取数据

    XPath解析页面和提取数据 一.简介 关注公众号"轻松学编程"了解更多. XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言.X ...

  7. 利用XPath解析带有xmlns的XML文件

    在.net中,编写读取xml 的程序中提示"未将对象引用设置到对象的实例",当时一看觉得有点奇怪.为什么在读取xml数据的时候也要实例化一个对象.google了才知道,xml文件中 ...

  8. xpath 解析 及案例

    xpath解析 编码流程: 1.实例化一个etree对象,且将页面源码加载到该对象中 2.使用xpath函数,且在函数中必须作用一个xpath表达式进行标签的定位 3.使用xpath进行属性和文本的提 ...

  9. Scrapy基础(六)————Scrapy爬取伯乐在线一通过css和xpath解析文章字段

    上次我们介绍了scrapy的安装和加入debug的main文件,这次重要介绍创建的爬虫的基本爬取有用信息 通过命令(这篇博文)创建了jobbole这个爬虫,并且生成了jobbole.py这个文件,又写 ...

随机推荐

  1. sqlhelp3

    using System; using System.Collections; using System.Collections.Specialized; using System.Data; usi ...

  2. 在队列中join()与task_done()的关联性

    1.基础解释: Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号 Queue.join() 实际上意味着等到队列为空,再执 ...

  3. [dev][python] 从python2进阶到python3你都需要了解什么

    基于python2快速掌握python3 0. 前言 这是一篇road map. 如果你会python2,读完这篇文章之后,你将掌握python3 1. 为什么会出现python3 Why Pytho ...

  4. Word图片、表格添加题注

    1.首先为图片.表格添加题注: 2.通过交叉引用,如图**和图片.表的编号相关联起来:

  5. Flask 接入第三方云通讯平台时出现 {‘172001’:’网络错误’}

    错误:{‘172001’:’网络错误’},经过上网查找原因,原来是 Python 升级到 2.7.9 之后引入了一个新特性,当打开一个 https 链接时,会验证一次 SSL 证书.而当目标网站使用的 ...

  6. 骑士(树形dp)

    题意:给你一个基环树森林,每个点有一个权值,一条边上的两个节点不能同时选择.选取任意个节点,求最大权值和 对于每颗基环树:找环→断边→树形dp(没有上司的舞会) #include<iostrea ...

  7. main.js中封装全局登录函数

    1. 在 main.js 中封装全局登录函数 通过 vue 对象的原型扩展,可以扩展一个函数,这样这个函数就可以在每一个界面通过类似指向对象的方式,去访问这个函数. 如下是 main.js 扩展的函数 ...

  8. mac环境使用ATS验证

    https://blog.csdn.net/skylin19840101/article/details/53760146 参考的这篇文章,用 /usr/bin/nscurl --ats-diagno ...

  9. lnmp 切换PHP版本,并且安装swoole

    lnmp 切换php版本 进入 lnmp 安装的目录,进入install.sh 的目录执行: sudo ./install.sh mphp 备注: find / -name install.sh 备注 ...

  10. Django 分组 聚合

    base_sql = Order.objects.filter(is_paid=True, merchant=merchant_id) # 如果aggregate前没有values,得到的结果是一个字 ...