python中xpath解析

**前言:**今年博客更新的太少了,很多学习计划都因为工作原因延迟了,今年真的身心太疲惫了,终于有点能理解为什么有的同行们会无心学习了,今年同样也是吃老本的一篇博客,所谓好记性不如烂笔头,以前用的再熟的东西都会随着时间慢慢淡化掉。尤其是作为测试人员在面临不同的项目会让你用到不同的技术,在一个项目组待几年以前学过的东西很可能会忘个干净,这时间就体现出笔记的重要性了,哈哈哈,今天废话比较多啊,切入正题把。
学过自动化测试或者爬虫的小伙伴们肯定对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 = 1
    for i in range(50):   # 分析页面标签分布,循环得到所有项目名称
        n += 1
        label = dev.xpath('./div[{}]/div/div[2]/div[2]/a/text()'.format(n))
        print(label)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值