【BOOK】解析库—XPath
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的更多相关文章
- 网页解析库-Xpath语法
网页解析库 简介 除了正则表达式外,还有其他方便快捷的页面解析工具 如:lxml (xpath语法) bs4 pyquery等 Xpath 全称XML Path Language, 即XML路径语言, ...
- Python3编写网络爬虫05-基本解析库XPath的使用
一.XPath 全称 XML Path Language 是一门在XML文档中 查找信息的语言 最初是用来搜寻XML文档的 但是它同样适用于HTML文档的搜索 XPath 的选择功能十分强大,它提供了 ...
- python爬虫基础04-网页解析库xpath
更简单高效的HTML数据提取-Xpath 本文地址:https://www.jianshu.com/p/90e4b83575e2 XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 ...
- 爬虫之解析库Xpath
简介 XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言. XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力.起初XPat ...
- 爬虫解析库xpath
# xpath简介 XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言.用于在 XML 文档中通过元素和属性进行导航. XPath基于XM ...
- 解析库--XPath
from lxml import etree 2 text = ''' 3 <div> 4 <ul> 5 <li class = "item-0"&g ...
- BeautifulSoup与Xpath解析库总结
一.BeautifulSoup解析库 1.快速开始 html_doc = """ <html><head><title>The Dor ...
- (最全)Xpath、Beautiful Soup、Pyquery三种解析库解析html 功能概括
一.Xpath 解析 xpath:是一种在XMl.html文档中查找信息的语言,利用了lxml库对HTML解析获取数据. Xpath常用规则: nodename :选取此节点的所有子节点 // : ...
- 网络爬虫之Selenium模块和Xpath表达式+Lxml解析库的使用
实际生产环境下,我们一般使用lxml的xpath来解析出我们想要的数据,本篇博客将重点整理Selenium和Xpath表达式,关于CSS选择器,将另外再整理一篇! 一.介绍: selenium最初是一 ...
- xpath beautiful pyquery三种解析库
这两天看了一下python常用的三种解析库,写篇随笔,整理一下思路.太菜了,若有错误的地方,欢迎大家随时指正.......(conme on.......) 爬取网页数据一般会经过 获取信息-> ...
随机推荐
- vue项目搭建(vue2+elementUI+less)
装node.js然后控制台输入node -v有版本号就是成功了 如是是windows系统建议装个git ,我这边习惯用命令行了 按照vue 和vue-cli vue-cli是一个vue的脚手架 按照提 ...
- EhLib 9安装
EhLib 9安装 安装EhLib: 在Installer文件夹里找到EhLibInstaller.exe,右键以管理员权限运行EhLibInstaller.exe. 按照提示一路安装下来,顺利完成. ...
- 国产DP4398 兼容替代CS4398 24Bit 192KHz数模转换芯片
CS4398是一款24Bit/192K Hz规格的解码芯片,它具有120分贝以上的讯噪比和动态范围,采用一个高级专用多位Delta-Sigma调制器,并整合了失配噪声整形技术.今天来讲讲它的国产替代型 ...
- 【Java学习Day02】基本的Dos命令
基本的Dos命令学习 打开CMD的方式 Windows+S,输入cmd打开命令控制台 鼠标右键单击windows图标,再单击windows终端(管理员)即可以管理员的身份打开PowerShell/CM ...
- 2022-11-22学习内容-Client端代码编写-数据删除
1.Client端代码编写 1.1activity_content_write.xml <?xml version="1.0" encoding="utf-8&qu ...
- (python)python 3.9 安装 robotframework-ride 因为 wxPython 失败
1. 正常安装方式 1)安装 robotframework pip install robotframework 2) 安装 robotframework-ride pip install robot ...
- ssh 远程报错 Permission denied, please try again.(密码输入正确也无法登录)
登录KVM 查看sshd服务systemctl status sshd 报错显示error: cloud not get shadow information forXXX 问题原因: 服务器 ...
- 生成虚拟mac地址通过dhcp获取ip,耗尽dhco地址池
平台:kali 软件:dhcpstarv 命令 dhcpstarv -i 网卡名称 -e 本机IP 查看dhcp服务器已经分发的地址 cat /tmp/dhcp.leases
- SQL命令--合并查询union
union命令作用:连接两个以上的 SELECT 语句的结果组合到一个表中 一. 示例: select id, url, auth_status as authStatus, enterprise_n ...
- tomcat前后端项目部署及调优
第1章 tomcat简介Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache,Sun和其他一些公司及个人共同 ...