XPath—XML Path Language

1、安装 lxml库

2、XPath常用规则

3、XPath解析页面

from lxml import etree

text = '''
<div>
<ul>
<li calss='item-1'><a href='link1.html'> first item </a></li>
<li calss='item-2'><a href='link2.html'> second item
</ul>
</div>
'''
## 调用HTML类进行初始化,构造一个XPath对象
## etree可以自动修正html文本
html = etree.HTML(text)
## tostring()输出修正后的HTML代码,结果是bytes类型
result = etree.tostring(html)
print(result.decode('utf-8')) ## 读取文本文件进行解析
html = etree.parse('./test.html', etree.HTMLParser())
## *匹配所有节点 , 列表形式, 所有节点都是Element对象
result = html.xpath('//*')
print(result)

4、//* 获取所有节点

from lxml import etree

html = etree.parse('./test.html', etree.HTMLParser())
## *匹配所有节点 , 列表形式, 所有节点都是Element对象
result = html.xpath('//*')
print(result)

## 获取所有li节点
result1 = html.xpath('//li')
print(result1) # [<Element li at 0x34eca08>, <Element li at 0x34ec530>]
print(result1[0]) # 获取第一个li节点

5、/ 子节点

from lxml import etree

html = etree.parse('./test.html', etree.HTMLParser())
## 获取 li节点的所有a子节点
result2 = html.xpath('//li/a')
print(result2)

6、.. 父节点

@ 属性

from lxml import etree

html = etree.parse('./test.html', etree.HTMLParser())
## 获取父节点 ..
## 获取属性 href 为"link2.html"的a节点的父亲节点的class属性值
result3 = html.xpath('//a[@href="link2.html"]/../@class')
print(result3) ## ['item-2']

7、text() 文本获取

from lxml import etree

html = etree.parse('./test.html', etree.HTMLParser())
## text() 获取节点中的文本
result4 = html.xpath('//li[@class="item-1"]//text()')
print(result4) result5 = html.xpath('//li[@class="item-1"]/a/text()')
print(result5)

8、contains()  属性多指匹配  

from lxml import etree
## li节点class属性有多个值
text = '''
<li class="li li-first"><a href="link-html">first item</a></li>
'''
html = etree.HTML(text)
## 属性多值匹配 contains(@class, "li")
result = html.xpath('//li[contains(@class, "li")]/a/text()')
print(result)

9、多属性匹配

from lxml import etree
## li节点有多个属性
text = '''
<li class="li li-first" name="item"><a href="link-html">first item</a></li>
'''
html = etree.HTML(text)
## 多属性匹配 and
result = html.xpath('//li[contains(@class, "li") and @name="item"]/a/text()')
print(result)

10、按序选择

from lxml import etree

html = etree.parse('./test.html', etree.HTMLParser())
## 按序选择 ## 序号以1开头 选取第一个li节点
result1 = html.xpath('//li[1]/a/text()')
print(result1) # [' first item '] ## 选取最后一个li节点
result2 = html.xpath('//li[last()]/a/text()')
print(result2) # [' sixth item'] ## 选取位置小于3的li节点
result3 = html.xpath('//li[position()<3]/a/text()')
print(result3) # [' first item ', ' second item'] ## 选取倒数第三个li节点
result4 = html.xpath('//li[last()-2]/a/text()')
print(result4) # [' forth item']

11、节点轴选择

from lxml import etree

html = etree.parse('./test.html', etree.HTMLParser())
## 节点轴选择 ## ancestor::* 获取所有的祖先节点
result1 = html.xpath('//li[1]/ancestor::*')
print(result1) ## ancestor::div 获取祖先节点 div
result2 = html.xpath('//li[1]/ancestor::div')
print(result2) ## attribute::* 获取第一个li节点所有的属性值
result3 = html.xpath('//li[1]/attribute::*')
print(result3) ## child::* 获取第一个li节点所有的孩子节点
result4 = html.xpath('//li[1]/child::*')
print(result4) ## descendant::* 获取第一个li节点所有的子孙节点
result5 = html.xpath('//li[1]/descendant::*')
print(result5) ## following::* 获取第一个li节点之后的所有节点
result6 = html.xpath('//li[1]/following::*')
print(result6) ## following-sibling::* 获取第一个li节点之后的所有同级节点
result6 = html.xpath('//li[1]/following-sibling::*')
print(result6)

  

  

  

  

  

  

  

【BOOK】解析库—XPath的更多相关文章

  1. 网页解析库-Xpath语法

    网页解析库 简介 除了正则表达式外,还有其他方便快捷的页面解析工具 如:lxml (xpath语法) bs4 pyquery等 Xpath 全称XML Path Language, 即XML路径语言, ...

  2. Python3编写网络爬虫05-基本解析库XPath的使用

    一.XPath 全称 XML Path Language 是一门在XML文档中 查找信息的语言 最初是用来搜寻XML文档的 但是它同样适用于HTML文档的搜索 XPath 的选择功能十分强大,它提供了 ...

  3. python爬虫基础04-网页解析库xpath

    更简单高效的HTML数据提取-Xpath 本文地址:https://www.jianshu.com/p/90e4b83575e2 XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 ...

  4. 爬虫之解析库Xpath

    简介 XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言. XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力.起初XPat ...

  5. 爬虫解析库xpath

    # xpath简介 XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言.用于在 XML 文档中通过元素和属性进行导航. XPath基于XM ...

  6. 解析库--XPath

    from lxml import etree 2 text = ''' 3 <div> 4 <ul> 5 <li class = "item-0"&g ...

  7. BeautifulSoup与Xpath解析库总结

    一.BeautifulSoup解析库 1.快速开始 html_doc = """ <html><head><title>The Dor ...

  8. (最全)Xpath、Beautiful Soup、Pyquery三种解析库解析html 功能概括

    一.Xpath 解析   xpath:是一种在XMl.html文档中查找信息的语言,利用了lxml库对HTML解析获取数据. Xpath常用规则: nodename :选取此节点的所有子节点 // : ...

  9. 网络爬虫之Selenium模块和Xpath表达式+Lxml解析库的使用

    实际生产环境下,我们一般使用lxml的xpath来解析出我们想要的数据,本篇博客将重点整理Selenium和Xpath表达式,关于CSS选择器,将另外再整理一篇! 一.介绍: selenium最初是一 ...

  10. xpath beautiful pyquery三种解析库

    这两天看了一下python常用的三种解析库,写篇随笔,整理一下思路.太菜了,若有错误的地方,欢迎大家随时指正.......(conme on.......) 爬取网页数据一般会经过 获取信息-> ...

随机推荐

  1. sync.Once

    保证在 Go 程序运行期间的某段代码只会执行一次 func main() { o := &sync.Once{} for i := 0; i < 10; i++ { o.Do(func( ...

  2. 使用ms17-010对win7进行渗透(445永恒之蓝)

    永恒之蓝是指2017年4月14日晚,黑客团体Shadow Brokers(影子经纪人)公布一大批网络攻击工具,其中包含"永恒之蓝"工具,"永恒之蓝"利用Wind ...

  3. jemter 分布式压测

    1.测试机搭建 首选 压力机A,压力机B,压力机C, 压力机A作为控制台 压力机B,压力机C作为分布式的测试机 压力机Aip:172.16.23.69, 压力机Bip:192.168.184.128 ...

  4. Java面向对象编程导论

    面向对象编程简介 JAVA是一门面向对象的编程语言.面向对象编程范式与面向过程编程范式同属于命令式编程范式,与函数式编程范式相区别.在面向对象编程范式中,我们将我们要处理的系统的业务逻辑表现为对象之间 ...

  5. gitlab 配置汉化版

    转载 https://blog.csdn.net/qq_44895681/article/details/123277087

  6. jieba分词的分词模式比较

    sentence = "我来自中国人民大学" # 默认精确模式 words = jieba.cut(sentence) print("精确模式: %s" % & ...

  7. [转载] Image Pixels

    转载自http://shutha.org/node/789   Image Pixels Pictures that are printed or that are displayed on a di ...

  8. java表达式语言mvel2/ognl/spring-expression

    <!-- https://mvnrepository.com/artifact/org.mvel/mvel2 --><dependency> <groupId>or ...

  9. 关于之前ecplices没法正常导入使用fx包的笔记

    办法一:在java build path里的libraries里导入跟工作环境版本(或者ecplices的jdk版本)相配的jar包. 注:如果导入的包是要用fx的,可以不直接改整个程序的工作环境,可 ...

  10. win10关闭自动更新的方法

    win10关闭自动更新的方法和步骤: 一.禁用Windows Update服务 1.打开服务项,win+r 输入 services.msc ,或者控制面板-管理工具-服务. 2.找到 Windows ...