Xpath使用教程

news/2024/11/17 2:43:22/文章来源:https://www.cnblogs.com/longlyseul/p/18200064

一、安装Xpath解析库-scrapy中的selector

win+r打开cmd,输入pip install wheel,先安装wheel库了才能安装.whl文件。

安装lxml库

到https://pypi.org/project/lxml/#files下载对应python版本的lxml库

 

切到lxml下载位置,安装lxml

安装Twisted库

到https://pypi.org/project/Twisted/#files下载对应python版本的Twisted库

切到Twisted下载位置,安装Twisted

安装scrapy库

到https://pypi.org/project/Scrapy/#files下载对应python版本的scrapy库

 

 安装完成之后,将pycharm的环境切到python_spider之前创建的虚拟环境中

二、Xpath 

xpath使用路径表达式在xml和html中进行导航,xpath包含标准函数库,xpath是一个w3c的标准。

xpath的节点关系(1)父节点(2)子节点(3)同胞节点(4)先辈节点(5)后代节点

Xpath语法

同一个元素可能会存在多种xpath的语法,xpath可以直接获取到值

from scrapy import Selectorhtml="""
<html lang="en">
<head><meta charset="UTF-8"><title>bobby基本信息</title><script src="jquery-3.5.1.min.js"></script>
</head>
<body><div id="info"><p style="color: blue">讲师信息</p><div class="teacher_info">Python全栈工程师<p class="age">年龄:29</p><p class="name bobbyname" data-bind="bobby">姓名:bobby</p><p class="work_years">工作年限:7年</p><p class="position">职位:python开发工程师</p></div><p style="color:aquamarine">课程信息</p><table class="courses"><tbody><tr><th>课程名称</th><th>讲师</th><th>地址</th></tr><tr><td>django打造在线教育</td><td>bobby</td><td><a href="https://coding.imooc.com/class/78.html">访问</a></td></tr><tr><td>python高级编程</td><td>bobby</td><td><a href="https://coding.imooc.com/class/200.html">访问</a></td></tr><tr><td>scrapy分布式爬虫</td><td>bobby</td><td><a href="https://coding.imooc.com/class/92.html">访问</a></td></tr><tr><td>diango rest framework打造生鲜电商</td><td>bobby</td><td><a href="https://coding.imooc.com/class/131.html">访问</a></td></tr><tr><td>tornado从入门到精通</td><td>bobby</td><td><a href="https://coding.imooc.com/class/290.html">访问</a></td></tr></tbody></table></div>
</body>
</html>
"""
#先取出所有的html值
sel=Selector(text=html)
print(sel)
tag1=sel.xpath("//*[@id='info']/div/p[1]")
print("tag1:"+str(tag1))
#取出info的text
tag2=sel.xpath("//*[@id='info']/div[1]/p[1]/text()").extract()[0]
if tag2:print("tag2:"+str(tag2))
#获取第一个div的p节点的值
tag3=sel.xpath("//div[1]/div[1]/p[1]/text()").extract()[0]
print("tag3:"+str(tag3))
tag4=sel.xpath("//div[1]/div/p[1]/text()").extract()[0]
print("tag4:"+str(tag4))

 输出结果:

 输出年龄:29

from scrapy import Selectorhtml="""
<html lang="en">
<head><meta charset="UTF-8"><title>bobby基本信息</title><script src="jquery-3.5.1.min.js"></script>
</head>
<body><div id="info"><p style="color: blue">讲师信息</p><div class="teacher_info">Python全栈工程师<p class="age">年龄:29</p><p class="name bobbyname" data-bind="bobby">姓名:bobby</p><p class="work_years">工作年限:7年</p><p class="position">职位:python开发工程师</p></div><p style="color:aquamarine">课程信息</p><table class="courses"><tbody><tr><th>课程名称</th><th>讲师</th><th>地址</th></tr><tr><td>django打造在线教育</td><td>bobby</td><td><a href="https://coding.imooc.com/class/78.html">访问</a></td></tr><tr><td>python高级编程</td><td>bobby</td><td><a href="https://coding.imooc.com/class/200.html">访问</a></td></tr><tr><td>scrapy分布式爬虫</td><td>bobby</td><td><a href="https://coding.imooc.com/class/92.html">访问</a></td></tr><tr><td>diango rest framework打造生鲜电商</td><td>bobby</td><td><a href="https://coding.imooc.com/class/131.html">访问</a></td></tr><tr><td>tornado从入门到精通</td><td>bobby</td><td><a href="https://coding.imooc.com/class/290.html">访问</a></td></tr></tbody></table></div>
</body>
</html>
"""
#先取出所有的html值
sel=Selector(text=html)
name_xpath="//div[1]/div/p[1]/text()"
name=""
tag_texts=sel.xpath(name_xpath).extract()
if tag_texts:name=tag_texts[0]
print(name)

 输出结果:

 通过class属性xpath找值

from scrapy import Selectorhtml="""
<html lang="en">
<head><meta charset="UTF-8"><title>bobby基本信息</title><script src="jquery-3.5.1.min.js"></script>
</head>
<body><div id="info"><p style="color: blue">讲师信息</p><div class="teacher_info">Python全栈工程师<p class="age">年龄:29</p><p class="name bobbyname" data-bind="bobby">姓名:bobby</p><p class="work_years">工作年限:7年</p><p class="position">职位:python开发工程师</p></div><p style="color:aquamarine">课程信息</p><table class="courses"><tbody><tr><th>课程名称</th><th>讲师</th><th>地址</th></tr><tr><td>django打造在线教育</td><td>bobby</td><td><a href="https://coding.imooc.com/class/78.html">访问</a></td></tr><tr><td>python高级编程</td><td>bobby</td><td><a href="https://coding.imooc.com/class/200.html">访问</a></td></tr><tr><td>scrapy分布式爬虫</td><td>bobby</td><td><a href="https://coding.imooc.com/class/92.html">访问</a></td></tr><tr><td>diango rest framework打造生鲜电商</td><td>bobby</td><td><a href="https://coding.imooc.com/class/131.html">访问</a></td></tr><tr><td>tornado从入门到精通</td><td>bobby</td><td><a href="https://coding.imooc.com/class/290.html">访问</a></td></tr></tbody></table></div>
</body>
</html>
"""
#先取出所有的html值
sel=Selector(text=html)
teacher_tag=sel.xpath('//div[@class="teacher_info"]/p[2]').extract()
print(teacher_tag)

输出结果:

如果是标签之中含有多个class ,可以使用contains方法获取

from scrapy import Selectorhtml="""
<html lang="en">
<head><meta charset="UTF-8"><title>bobby基本信息</title><script src="jquery-3.5.1.min.js"></script>
</head>
<body><div id="info"><p style="color: blue">讲师信息</p><div class="teacher_info">Python全栈工程师<p class="age">年龄:29</p><p class="name bobbyname" data-bind="bobby">姓名:bobby</p><p class="work_years">工作年限:7年</p><p class="position">职位:python开发工程师</p></div><p style="color:aquamarine">课程信息</p><table class="courses"><tbody><tr><th>课程名称</th><th>讲师</th><th>地址</th></tr><tr><td>django打造在线教育</td><td>bobby</td><td><a href="https://coding.imooc.com/class/78.html">访问</a></td></tr><tr><td>python高级编程</td><td>bobby</td><td><a href="https://coding.imooc.com/class/200.html">访问</a></td></tr><tr><td>scrapy分布式爬虫</td><td>bobby</td><td><a href="https://coding.imooc.com/class/92.html">访问</a></td></tr><tr><td>diango rest framework打造生鲜电商</td><td>bobby</td><td><a href="https://coding.imooc.com/class/131.html">访问</a></td></tr><tr><td>tornado从入门到精通</td><td>bobby</td><td><a href="https://coding.imooc.com/class/290.html">访问</a></td></tr></tbody></table></div>
</body>
</html>
"""
#先取出所有的html值
sel=Selector(text=html)
teacher_tag=sel.xpath('//p[contains(@class,"bobbyname")]').extract_first()
print(teacher_tag)

  输出结果:

在这个网站上存在着很多类似contains的内置方法

 https://developer.mozilla.org/en-US/docs/Web/XPath/Functions

使用last()函数获取最后一个元素的值

from scrapy import Selectorhtml="""
<html lang="en">
<head><meta charset="UTF-8"><title>bobby基本信息</title><script src="jquery-3.5.1.min.js"></script>
</head>
<body><div id="info"><p style="color: blue">讲师信息</p><div class="teacher_info">Python全栈工程师<p class="age">年龄:29</p><p class="name bobbyname" data-bind="bobby">姓名:bobby</p><p class="work_years">工作年限:7年</p><p class="position">职位:python开发工程师</p></div><p style="color:aquamarine">课程信息</p><table class="courses"><tbody><tr><th>课程名称</th><th>讲师</th><th>地址</th></tr><tr><td>django打造在线教育</td><td>bobby</td><td><a href="https://coding.imooc.com/class/78.html">访问</a></td></tr><tr><td>python高级编程</td><td>bobby</td><td><a href="https://coding.imooc.com/class/200.html">访问</a></td></tr><tr><td>scrapy分布式爬虫</td><td>bobby</td><td><a href="https://coding.imooc.com/class/92.html">访问</a></td></tr><tr><td>diango rest framework打造生鲜电商</td><td>bobby</td><td><a href="https://coding.imooc.com/class/131.html">访问</a></td></tr><tr><td>tornado从入门到精通</td><td>bobby</td><td><a href="https://coding.imooc.com/class/290.html">访问</a></td></tr></tbody></table></div>
</body>
</html>
"""
#先取出所有的html值
sel=Selector(text=html)
info1=sel.xpath('//div[contains(@class,"teacher")]/p[last()]/text()').extract_first()
print(info1)
info2=sel.xpath('//div[contains(@class,"teacher")]/p[last()-1]/text()').extract_first()
print(info2)

 输出结果:

  获取class属性值

from scrapy import Selectorhtml="""
<html lang="en">
<head><meta charset="UTF-8"><title>bobby基本信息</title><script src="jquery-3.5.1.min.js"></script>
</head>
<body><div id="info"><p style="color: blue">讲师信息</p><div class="teacher_info">Python全栈工程师<p class="age">年龄:29</p><p class="name bobbyname" data-bind="bobby">姓名:bobby</p><p class="work_years">工作年限:7年</p><p class="position">职位:python开发工程师</p></div><p style="color:aquamarine">课程信息</p><table class="courses"><tbody><tr><th>课程名称</th><th>讲师</th><th>地址</th></tr><tr><td>django打造在线教育</td><td>bobby</td><td><a href="https://coding.imooc.com/class/78.html">访问</a></td></tr><tr><td>python高级编程</td><td>bobby</td><td><a href="https://coding.imooc.com/class/200.html">访问</a></td></tr><tr><td>scrapy分布式爬虫</td><td>bobby</td><td><a href="https://coding.imooc.com/class/92.html">访问</a></td></tr><tr><td>diango rest framework打造生鲜电商</td><td>bobby</td><td><a href="https://coding.imooc.com/class/131.html">访问</a></td></tr><tr><td>tornado从入门到精通</td><td>bobby</td><td><a href="https://coding.imooc.com/class/290.html">访问</a></td></tr></tbody></table></div>
</body>
</html>
"""
#先取出所有的html值
sel=Selector(text=html)
class_value=sel.xpath('//div[contains(@class,"teacher")]/p[last()-1]/@class').extract_first()
print(class_value)

 输出结果:

 同时获取两个属性值

from scrapy import Selectorhtml="""
<html lang="en">
<head><meta charset="UTF-8"><title>bobby基本信息</title><script src="jquery-3.5.1.min.js"></script>
</head>
<body><div id="info"><p style="color: blue">讲师信息</p><div class="teacher_info">Python全栈工程师<p class="age">年龄:29</p><p class="name bobbyname" data-bind="bobby">姓名:bobby</p><p class="work_years">工作年限:7年</p><p class="position">职位:python开发工程师</p></div><p style="color:aquamarine">课程信息</p><table class="courses"><tbody><tr><th>课程名称</th><th>讲师</th><th>地址</th></tr><tr><td>django打造在线教育</td><td>bobby</td><td><a href="https://coding.imooc.com/class/78.html">访问</a></td></tr><tr><td>python高级编程</td><td>bobby</td><td><a href="https://coding.imooc.com/class/200.html">访问</a></td></tr><tr><td>scrapy分布式爬虫</td><td>bobby</td><td><a href="https://coding.imooc.com/class/92.html">访问</a></td></tr><tr><td>diango rest framework打造生鲜电商</td><td>bobby</td><td><a href="https://coding.imooc.com/class/131.html">访问</a></td></tr><tr><td>tornado从入门到精通</td><td>bobby</td><td><a href="https://coding.imooc.com/class/290.html">访问</a></td></tr></tbody></table></div>
</body>
</html>
"""
#先取出所有的html值
sel=Selector(text=html)
#print(sel)
class_value=sel.xpath('//p[@class="work_years"]|//p[@class="position"]').extract()
print(class_value)

 输出结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/708806.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JEEVMS仓库管理系统任意文件读取漏洞

漏洞描述 该漏洞由于系统未能正确实施或执行对文件的访问控制权限控制,允许未经授权的用户访问或读取文件,并且应用程序未能对用户输入进行适当验证,攻击者可以构造特殊的输入,如路径遍历攻击读取系统文件内容,导致信息泄露 Fofa: body="plug-in/lhgDialog/lhgdialog…

vulnhub--JIS靶场

环境搭建 kali(攻击机,NAT):192.168.96.4 靶机(linux,NAT):ip未知 信息收集 主机探测 netdiscover -i 监听网卡发现96网段存活主机,猜测是96.5为靶机地址 端口扫描 nmap -sS -v 192.168.96.5(高校快速的扫描,TCP半链接扫描) nmap -A 192.168.96.5(全面扫描,更全面)…

rthread学习记录汇总-不断更新

1、rthread 同Linux类似,包含了所有主流的芯片、cpu架构,可从官方获取最新的rt-thread源码后进行裁剪2、可从rthread官网下载env工具,env工具可用来对rtthread源码生成mdk/iar工程 命令式scons --target=mdk5 scons --targe=iar scons自带的编译固件功能,命令为scnons,…

【0day漏洞复现】北京慧飒科技有限责任公司WEB VIDEO PLATFORM存在未授权访问漏洞

阅读须知花果山的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人…

存钱计划(三)

存钱计划(三) 时间限制(普通/Java):1000MS/30000MS 内存限制:65536KByte 描述 TZC的店铺比较多,上次WY随便走只要能走到就行,现在他学聪明了。WY去买东西的话,确定一家店以后,当然他先要想想怎么样走到那家店走的路最少。店与店之间是有走的方向的,从店A到店B可以,店B到…

视野修炼-技术周刊第83期 | MarsCode

① MarsCode - 在线 AI IDE ② Turbo Console Log - 快速创建console ③ mcfly - 命令行历史搜索 ④ emoji-mart - emoji 选择组件 ⑤ OpenSumi 3.0 正式发布 ⑥ ElysiaJS - 基于Bun的Web框架 ⑦ extension.js - 跨浏览器插件开发 ⑧ 服务器实时消息获取5种方案 ⑨ Remix Yours…

实验4:代码审查

一、实验题目 :代码审查 二、实验目的 1、熟悉编码风格,利用开发环境所提供的平台工具对代码进行自动格式审查; 2、根据代码规范制定代码走查表,并按所制定的审查规范互审代码。 三、实验内容 1、IDEA环境和PyCharm环境二选一; IDEA环境 (1)预先准备在IDEA环境下实现对输…

BUUCTF-WEB(9-14)

[极客大挑战 2019]Secret File 打开题目查看源码,找到了一个文件然后就是一个按钮,点击后,他应该是反应了,但是我们看不到那我们抓包看看,这里是Burp抓包后,发到重发器发送了一遍,看看响应包,发现了然后访问这个网页就是一个源码这里没有过滤php://filter ?file=php:/…

iMessage群发,苹果iMessage短信,苹果iMessage推信,电脑版Mac Os系统自动群发iMessage完美实现 - 电脑端升级版

一、PC电脑版苹果系统(Mac OS)上实现imessage群发总结为以下几种方式: /*MacOS苹果系统,正常情况下,只能安装到苹果公司自己出品的Mac电脑,俗称白苹果,不能安装到各种组装机或者其他品牌的品牌机上,黑苹果的的原理,就是通过一些 “破解补丁” 工具欺骗macOS系统,让苹果系统…

pip虚拟环境安装包

pip虚拟环境安装包 问题描述 通常情况下,我们常使用Conda创建虚拟环境,然后再在虚拟环境内进行安装相应的软件包。虚拟环境可以让我们免收软件包的版本冲突的问题。但是有一些软件包不能通过Conda安装,只能通过pip安装。通常情况下,pip安装的软件包作用于全局,因而又会导致…

OWASP-Hackademic-Challenges

1.靶场安装 靶场下载:https://code.google.com/archive/p/owasp-hackademic-challenges/downloads 在phpstudy中搭建即可 访问页面:2.OWASP Hackademic Challenge – Challenge 1 2.1.解题点击链接,进入靶场页面上没有什么有用的消息,查看页面源代码(Ctrl+U)可以找到不同…