python中xpath解析
创始人
2024-03-17 06:17:04
0

**前言:**今年博客更新的太少了,很多学习计划都因为工作原因延迟了,今年真的身心太疲惫了,终于有点能理解为什么有的同行们会无心学习了,今年同样也是吃老本的一篇博客,所谓好记性不如烂笔头,以前用的再熟的东西都会随着时间慢慢淡化掉。尤其是作为测试人员在面临不同的项目会让你用到不同的技术,在一个项目组待几年以前学过的东西很可能会忘个干净,这时间就体现出笔记的重要性了,哈哈哈,今天废话比较多啊,切入正题把。
学过自动化测试或者爬虫的小伙伴们肯定对xpath再熟悉不过了,xpath呢其实就是在xml中搜索内容的一门语言,也是通用性比较强的一种解析方式。
安装:

pip instl lxml

实现方式:
1、获取页面源代码
2、实列化一个etree对象,将需要解析的页面源代码放到对象中。
3、调用etree对象中的xpath方法结合着xpath表达式实现标签的定位。
xpath表达式:

  • /:表示是从根节点开始定位,表示的是一个层级
  • //:表示的是多个层级。可以表示从任意位置开始定位
  • (‘//div[@class = “dong”]’) 根据属性定位
  • (‘//div[@class = “song”]/p[3]’) 根据索引定位 (索引是从1开始的)
  • (‘//div[@class=“tang”]//li[5]/a/text()’)[0] /text()获取标签中直系的文本 取到标签中的文字,返回的是一个列表所以必须要用列表返回。
    //text()获取标签中所有的文本内容
  • ('//div[@class=“tang”]/li/@tag) 取标签中的属性
    举例实现
    定位该页面所有的项目名称:
    在这里插入图片描述
import requests
from lxml import etree
url = 'https://nanjing.zbj.com/search/service/?kw=saas&r=1&nt=3606&fcn' \'=%E7%94%B5%E5%AD%90%E5%95%86%E5%9F%8E%E7%B3%BB%E7%BB%9F'
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/103.0.0.0 Safari/537.36'
}
resp = requests.get(url=url, headers=header) # 获取页面源代码
html = etree.HTML(resp.text) # 实列化一个etree对象,将需要解析的页面源代码放到对象中

从根节点开始定位获取项目名称:

devis = html.xpath('//*[@id="__layout"]/div/div[2]/div/div[4]/div[4]/div[1]/div[1]/div/div[3]/div[2]/a/text()') # 使用了多层级组合属性结合单层级的定位方法print(devis)
# 打印:['微信小程序开发商城定制生鲜配送外卖同城社交婚恋直播考试']

获取某个标签内容:

html = etree.HTML(resp.text)
devis = html.xpath('//*[@id="__layout"]/div/div[2]/div/div[4]/div[4]/div[1]/div[1]/div/@data-trace-id')
print(devis)
# 打印:['f58e8d25-a56a-40c6-8335-cac6633228310001']

获取当前页面所有项目标题
定位所有项目的父标签:
在这里插入图片描述

devis = html.xpath('//*[@id="__layout"]/div/div[2]/div/div[4]/div[4]/div[1]') # 找到项目详情的上级标签并解析
for dev in devis: # 循环上级标签n = 1for i in range(50):   # 分析页面标签分布,循环得到所有项目名称n += 1label = dev.xpath('./div[{}]/div/div[2]/div[2]/a/text()'.format(n))print(label)

打印:
在这里插入图片描述

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...