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