使用Python爬取易车网汽车信息(含x-sign参数逆向分析)

本文主要是介绍使用Python爬取易车网汽车信息(含x-sign参数逆向分析),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1. 写在前面
  • 2. 接口分析
  • 3. 断点分析
  • 3. 算法还原

【🏠作者主页】:吴秋霖
【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研究与开发工作!
【🌟作者推荐】:对爬虫领域以及JS逆向分析感兴趣的朋友可以关注《爬虫JS逆向实战》《深耕爬虫领域》
未来作者会持续更新所用到、学到、看到的技术知识!包括但不限于:各类验证码突防、爬虫APP与JS逆向分析、RPA自动化、分布式爬虫、Python领域等相关文章

作者声明:文章仅供学习交流与参考!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!如有侵权,请联系作者本人进行删除!

1. 写在前面

  最近有位读者找上了作者,需要采集易车网上面一些汽车相关的数据,用以毕业设计使用。据了解读者的情况会一点Python,也懂一点爬虫(但是到什么程度不详~~

在这里插入图片描述

按照描述的话,应该是说在获取详情页数据的时候,接口有参数加密?接下来将本次的分析分享出来供大家参考学习,难度算是入门级,适合各位学习爬虫技术的新手小伙伴们!最后完整的代码也提供给了读者

2. 接口分析

老规矩,这里的话更多车型需要登录才可显示更多数据,打开详情页面,监测一下请求发包,请求头内X-sign应该是加密生成的,如下所示:

在这里插入图片描述

X-User-Guid参数的话看着像是用户唯一标识的值,可固定!后面断点分析的时候发现这个参数在CK信息内获取就可以了,如下所示:

在这里插入图片描述

然后详情接口buy_car_calculator_info跟同系二手车推荐接口get_recommend_ucar_list只需提交两个参数,分别是cidparam,参数在响应接口内均可找到,如下所示:

?cid=508&param={"serialId":"7350"}
?cid=508&param={"cityId":"201","serialId":"7219","type":1,"count":8}

3. 断点分析

X-sign参数32位,这里大概率还是MD5加密,先全局搜索一下参数,可以直接在JS文件找到,下个断刷新一下,如下所示:

在这里插入图片描述

单步跟到s方法内,这个方法是加密核心位置,我们直接把代码拿下来分析一下,如下所示:

function s(e, t) {var n = "";if ("headers" == e.encryptType) {var i = e.data ? JSON.stringify(e.data) : "{}", o = r(e, t);n = "cid=" + t.cid + "&param=" + i + o + t.timestamp} else {var a = [];a.push("cid=" + t.cid),a.push("uid=" + t.uid),a.push("ver=" + t.ver),a.push("devid=" + (e.deviceId || "")),a.push("t=" + t.timestamp),a.push("key=" + t.paramsKey),n = a.join(";")}var s = yicheUtils.md5(n);return s}

相信到这里,有经验的小伙伴都知道如何还原了,MD5加密,然后n是加密的对象,其中o是一个固值,请求参数加上o跟时间戳加密生成最终签名,如下所示:

在这里插入图片描述

3. 算法还原

下面我们分别使用多种语言来还原一下上面sign加密算法,首先使用Python进行实现,如下所示:

import hashlib
import timetimestamp = str(int(time.time() * 1000))
param = '' # 请求参数
cid = ''
o = '19DDD1FBDFF065D3A4DA777D2D7A81EC'
n = f'cid={cid}&param={param}{o}{timestamp}'obj = hashlib.md5()
obj.update(n.encode('utf-8'))
sign = obj.hexdigest()print(sign)

NodeJS实现方式如下:

const crypto = require('crypto');const timestamp = new Date().getTime().toString();
const param = '';
const cid = '';
const o = '19DDD1FBDFF065D3A4DA777D2D7A81EC';
const n = `cid=${cid}&param=${param}${o}${timestamp}`;const hash = crypto.createHash('md5');
hash.update(n);
const sign = hash.digest('hex');console.log(sign);

Golang实现方式如下:

package mainimport ("crypto/md5""encoding/hex""fmt""strconv""time"
)func main() {timestamp := strconv.FormatInt(time.Now().UnixNano()/int64(time.Millisecond), 10)param := ""o := "19DDD1FBDFF065D3A4DA777D2D7A81EC"cid := ""n := "cid=" + cid + "&param=" + param + o + timestamphash := md5.New()hash.Write([]byte(n))sign := hex.EncodeToString(hash.Sum(nil))fmt.Println(sign)
}

最后作者也是编写了一个完整的爬虫Demo发送给了那位读者,测试结果如下所示:

在这里插入图片描述

这篇关于使用Python爬取易车网汽车信息(含x-sign参数逆向分析)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/922888

相关文章

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Python虚拟环境与Conda使用指南分享

《Python虚拟环境与Conda使用指南分享》:本文主要介绍Python虚拟环境与Conda使用指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、python 虚拟环境概述1.1 什么是虚拟环境1.2 为什么需要虚拟环境二、Python 内置的虚拟环境工具

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取