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. 开启windows的 admin+开启tel+电源+远程功能

    1.控制面板   小图标   程序功能   打开关闭windows功能     开启Telnet 的服务两个都选         2. 启动tel服务   控制面板  小图标 管理工具 服务 找到 t ...

  2. 几何入门合集 gym101968 problem F. Mirror + gym102082 Problem F Fair Chocolate-Cutting + gym101915 problem B. Ali and Wi-Fi

    abstract: V const & a 加速 F. Mirror 题意 链接 问题: 有n个人在y=0的平面上(及xoz平面).z=0平面上有一面镜子(边平行于坐标轴).z=a平面上有q个 ...

  3. 学习ActiveMQ(五):activemq的五种消息类型和三种监听器类型

    一.前面我们一直发送的是字符串类型,其实activemq一共支持五种消息类型: 1.String消息类型:发送者:消费者: 1.String消息类型:发送者:消费者: 1.String消息类型:发送者 ...

  4. (Linux)CentOS7下安装JDK 1.8

    参考:http://www.cnblogs.com/sxdcgaq8080/p/7492426.html 1.首先查看CentOS7是否有自带的JDK ,一般Linux会自动下载安装Open JDK ...

  5. ORACLE——EXTRACT() 截取日期时间的函数使用

    1.截取日期的 年: --使用方法 EXTRACT(YEAR FROM DATE) SQL> SELECT EXTRACT( YEAR FROM SYSDATE ) FROM DUAL; --结 ...

  6. xgboost 最优参数, df某一个字段进行字符串搜索

    0.909323  with:   {'max_depth': 6, 'min_child_weight': 0.8, 'n_estimators': 800} df_huoguo = df[df.c ...

  7. python迭代-如何对迭代器做切片操作

    如何对迭代器做切片操作 问题举例 读取某个文件内容的100~300行内容,我们是否可以使用 类似列表切片的方式得到一个100~300行文件内容的生成器 分析 列表的切片操作其实是在重载方法__getI ...

  8. Python3.0科学计算学习之函数

    函数 函数允许程序的控制在不同的代码片段之间切换,函数的重要意义在于可以在程序中清晰地分离不同的任务,将复杂的问题分解为几个相对简单的子问题,并逐个解决.即"分而治之". Pyth ...

  9. 关于Linux与Windows的在服务器的一些区别

    我们平时说学习运维要依托于Linux系统,因为在服务器领域Linux基本取得了市场,那么Linux在服务器领域与Windows相比有哪些优势呢?我们来看下:我们选择服务器主要是成本,安全稳定,这两大方 ...

  10. it入门之:学会使用Git 分布式版本控制工具

    环境:window 工具:git & TortoiseGit 下载安装以及配置环境变量 :略略略 创建Github账户:登录https://github.com/用自己的常用邮箱创建账户,用来 ...