当前位置: 首页 > news >正文

【JS逆向基础】数据分析之XPATH

【JS逆向基础】数据分析之正则表达式-CSDN博客

【JS逆向基础】数据分析 之 BS4-CSDN博客

这里接续前面的两篇文章介绍关于数据分析的第三个工具XPATH,


XPATH

1,简介

xpath在Python的爬虫学习中,起着举足轻重的地位,对比正则表达式re两者可以完成同样的工作,实现的功能也差不多,但xpath明显比re具有优势,在网页分析上使re退居二线。

xpath 全称为XML Path Language 一种小型的查询语言xpath的优点:

  • 可在XML中查找信息
  • 支持HTML的查找
  • 通过元素和属性进行导航

python开发使用XPath条件: 由于XPath属于Ixml库模块,所以首先要安装库lxml。

from lxml import etree
selector = etree.HT(源码)     #将源码转化为能被xPath匹配的格式
selector.xpath(表达式)        #返回为一列表

2,路径表达式

3,谓语

谓语用来查找某个特定的节点或者包含某个指定的值的节点,

谓语被嵌在方括号中。

在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果

4,选取未知节点

#注意:一般引号之间的引号用单引号代替,否则会报错误处理#1,逻辑运算
//div[@id="head" and eclass="s_dow"]# 查找所有id属性等于head并且class属性等于s_down的div标签
//title|//price # 选取文档中的所有 title 和 price 元素, ""两边必须是完整的xpath路径
#2,属性查询
//div[@id]# 找所有包含id属性的div节点
//div[@id="maincontent"]# 查找所有id属性等于maincontent的div标签
//@class
//li[@name="xx"]//text() # 获取li标签name为xx的里面的文本内容
#3,获取第几个标签 索引从1开始
tree.xpath('//li[1]/a/text()')#获取第一个
tree.xpath('//li[last()]/a/text()')#获取最后一个
tree.xpath('//li[last()-1]/a/text()')#获取倒数第二个
#4,模糊查询
//div[contains(@id,"he")]# 查询所有id属性中包含he的div标签
//div[starts-with(@id,"he")〕# 查询所有id属性中包以he开头的div标签
//div/h1/text() #查找所有div标签下的直接子节点h1的内容
//div/a/ehref#获取a里面的href属性值//* #获取所有
//*[@class-"xx"]      #获取所有class为xx的标签# 获取节点内容转换成字符串
c=tree.xpath('//li/a')[0]
result=etree.tostring(c,encoding='utf-8')
print(result.decode('urr-8'))

 5,实例

将一个HTML界面中的电影名字与评分全部提取出来

#将一个HTML界面中的电影名字与评分全部提取出来with open("豆瓣250.html",'r', encoding='utf-8') as f:s = f.read()# print(s)import reret = re.findall("<table width=\"100%\" class=\"\">.*?<td width=\"100\" valign=\"top\">.*?title=\"(.*?)\".*?</td>.*?<span class=\"rating_nums\">(.*?)</span>", s, re.S)print(ret)
print(len(ret))

 另一种写法

from lxml import etreewith open("../豆瓣250.html",'r', encoding='utf-8') as f:data = f.read()print(type(data))
selector = etree.HTML(data)     #将源码转化为能被xPath匹配的格式
print(type(selector))ret = selector.xpath('//div[@class="indent"]/div/table[@width="100%"]')        #返回为一列表m_datas = []
for i in ret:movie_name = i.xpath('./tbody/tr/td[1]/a[@class="nbg"]/@title')movie_sore = i.xpath('./tbody/tr/td[2]/div/div/span[@class="rating_nums"]/text()')print(movie_name,movie_sore)
http://www.lryc.cn/news/581585.html

相关文章:

  • android 获取手机配对的蓝牙耳机的电量
  • 【PyTorch】PyTorch中torch.nn模块的池化层
  • 全能视频处理工具介绍说明
  • [shad-PS4] docs | 内核/系统服务 | HLE-高等级模拟
  • Spark流水线数据质量检查组件
  • UNet改进(16):稀疏注意力(Sparse Attention)在UNet中的应用与优化策略
  • Redis集群和 zookeeper 实现分布式锁的优势和劣势
  • 物联网实施与运维【路由器/网关配置】+智能楼道系统
  • python库 dateutil 库的各种案例的使用详解
  • 【Note】《Kafka: The Definitive Guide》第三章: Kafka 生产者深入解析:如何高效写入 Kafka 消息队列
  • Android studio在点击运行按钮时执行过程中输出的compileDebugKotlin 这个任务是由gradle执行的吗
  • 升级AGP(Android Gradle plugin)和gradle的版本可以提高kapt的执行速度吗
  • 【python】对纯二进制向量(仅包含 0 和 1,长度为 8 或 16)的检测和提取
  • 基于腾讯云开发与“人·事·财·物”架构理念的家政预约小程序设计与实现
  • 【Python练习】030. 编写一个函数,实现字符串的反转
  • Python 中 ffmpeg-python 库的详细使用
  • 一条 SQL 语句的内部执行流程详解(MySQL为例)
  • 2025 JuniorCryptCTF re 部分wp
  • 重力翻转者:原创趣味小游戏
  • 前端开发常见问题(从布局到性能优化)
  • 【libm】 10 rem_pio2函数 (rem_pio2.rs)
  • 人工智能之数学基础:线性回归算法的矩阵参数求导
  • 传统微商困境与开源链动2+1模式、AI智能名片及S2B2C商城小程序的转型破局
  • AUTOSAR进阶图解==>AUTOSAR_SWS_V2XFacilities
  • Hadoop MapReduce 入门
  • Hadoop高可用集群搭建
  • k8s-服务发布基础
  • 小菜狗的云计算之旅,学习了解rsync+sersync实现数据实时同步(详细操作步骤)
  • 【Linux网络编程】Socket - UDP
  • 儿童趣味记忆配对游戏