使用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 time

timestamp = 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 main

import (
    "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 + timestamp

    hash := md5.New()
    hash.Write([]byte(n))
    sign := hex.EncodeToString(hash.Sum(nil))

    fmt.Println(sign)
}

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/561751.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

.NET 邮件发送 SMTP邮件发送

SMTP(Simple Mail Transfer Protocol)是用于电子邮件传输的规则集,可以从邮件客户端向接收电子邮件服务器发送、中继或转发邮件。发件人可使用SMTP 服务器来执行发送电子邮件的过程。SMTP服务器则是按照这些规则中转电子邮件的服务器。 IMAP…

Linux应用开发(8):Linux进程间通信(IPC):管道

Linux应用开发(7):Linux进程间通信(IPC):POSIX消息队列https://blog.csdn.net/tecsai/article/details/137879465 1. 简述 我们在前面已经介绍了进程间通信(IPC)常用的“消息队列”…

C语言 逻辑运算符

本文 我们来说 逻辑运算符 有时做出决策需要测试多个条件,C语言提供了用于将简单条件组合成复杂条件的逻辑运算符。 逻辑运算符 如下图 用逻辑运算符连接操作数组成的表达式称为逻辑表达式。 逻辑运算的结果只有0和1 逻辑运算的对象可以是任意数值型,但…

C# 自动填充文字内容到指定图片

目录 需求 开发运行环境 方法设计 实现代码 AddText方法 图片转Base64 调用示例 小结 需求 在我们的一些发布系统项目应用中,会经常发布一些链接图标,该图标基本上以模板背景为主,并填充项目文字内容。解决方式一般会让美工进行制作…

SL7220线性降压恒流3.6A 外围只需两个电阻 耐压40V汽车大灯IC

概述: SL7220 是一款双路线性降压LED恒流驱动器,外围只需两个电阻,输出电流10MA-3600MA。 SL7220 内置过热保护功能,内置输入过压保护功能。 SL7220 静态电流典型值为120uA。 特点 ●输入电压范围:2.5V-40V ●电…

Rokid AR Lite空间计算套装发布,中国空间计算踏上差异化领先之路

动动手指、动动眼睛就可以“操控一切”,这种颇具科幻感、未来感的交互方式,令许多人感叹“未来已来”。而这令人震撼的变革背后,正是空间计算技术的迅猛崛起与广泛应用,使得这种曾经只存在于想象中的交互方式,如今正逐…

超分中使用的损失函数和经典文章

损失函数 https://towardsdatascience.com/super-resolution-a-basic-study-e01af1449e13 在GAN出现之前,使用的更多是MSE,PSNR,SSIM来衡量图像相似度,同时也使用他们作为损失函数。 MSE 表面上MSE直接决定了PSNR,MSE&#xff…

html接入高德地图

1.申请key key申请地址&#xff1a;https://console.amap.com/dev/key/app 官方文档 https://lbs.amap.com/api/javascript-api-v2/summary 2.html接入示例 需要将YOUR_KEY替换成自己的key <!doctype html> <html> <head><meta charset"utf-…

2024年上海中考数学模拟题和答案,由过去十年真题随机组卷

还有不到两个月就是上海中考了&#xff0c;为了帮助孩子们更好地准备&#xff0c;好真题网把整理了过去十年的中考数学题真题&#xff0c;做成了在线试卷&#xff0c;便于孩子便捷地反复练习。吃透真题及其背后的知识点&#xff0c;是备考各种考试最科学、高效的方法&#xff0…

端午新疆自驾游招募

欢迎关注「苏南下」 在这里分享我的旅行和影像创作心得 端午节快到了&#xff0c;我计划带队开启【新疆喀什】旅拍摄影小团。让我这个新疆人带你去新疆赏美景、拍美片和吃美食。 出行时间是6.6-6.11日&#xff0c;为期6天。 为了保证良好的出行体验&#xff0c;这次团队招募人数…

Vue+OpenLayers7入门专栏目录,OpenLayers7中文文档,OpenLayers7中文手册api,OpenLayers7中文教程

返回入门到实战汇总目录&#xff1a;汇总目录 前言 本篇作为《VueOpenLayers7入门教程》所有文章的二合一汇总目录&#xff0c;方便查找。 本专栏源码是由OpenLayers7.x版本结合Vue框架编写。本专栏基本上每章都有详细的源代码和运行示例以供参考&#xff0c;且保证每章代码都…

【论文精读】Attention is all you need

摘要 主要的序列转换模型是基于复杂的循环或卷积神经网络&#xff0c;其中包括一个编码器和一个解码器。性能最好的模型还通过一种注意力机制将编码器和解码器连接起来。我们提出了一种新的简单的网络架构&#xff0c;Transformer&#xff0c;完全基于注意机制&#xff0c;完全…

每日学习笔记:C++ STL算法之容器元素排序

目录 常规排序 升序排序&#xff1a; sort(beg, end) stable_sort(beg, end, op) 自定义规则排序&#xff1a; sort(beg, end, op) stable_sort(beg, end, op) 局部排序(使前段有序) partial_sort(beg, sortEnd, end) partial_sort(beg, sortEnd, end, op) 复制并局…

【C++】日期类Date(详解)

&#x1f525;个人主页&#xff1a;Forcible Bug Maker &#x1f525;专栏&#xff1a;C 目录 前言 日期类 日期类实现地图 获取某年某月的天数&#xff1a;GetMonthDay 检查日期合法&#xff0c;构造函数&#xff0c;拷贝构造函数&#xff0c;赋值运算符重载及析构函数…

2. uni-app的一些介绍

前言 就目前的前端生态而言&#xff0c;跨端开发基本算是每一个前端开发者必备的技能点之一了&#xff0c;而在Vue这个技术栈里uni-app在跨端是独一档的&#xff0c;不信的话可以翻翻Boss之类的招聘网站.... 概述 阅读时间&#xff1a;约5~10分钟&#xff1b; 本文重点&…

linux的编译器vim

vim简介 之前我们在win下写代码&#xff0c;都是下载一些编译器VS/eclipse等 他们不仅可以写代码&#xff0c;还可以实现代码的运行调试&#xff0c;开发。这样的编译器叫做集成编译器 而linux中虽然也有这样的编译器&#xff0c;但不管是从下载&#xff0c;还是使用中都会显…

谷歌地球引擎Google Earth Engine下载数字高程模型DEM数据的方法

本文介绍在谷歌地球引擎&#xff08;Google Earth Engine&#xff0c;GEE&#xff09;中&#xff0c;批量下载指定时间与空间范围内的数字高程模型&#xff08;DEM&#xff09;数据的方法。 本文是谷歌地球引擎&#xff08;Google Earth Engine&#xff0c;GEE&#xff09;系列…

UltraScale+的40G/50G Ethernet Subsystem IP核使用

文章目录 前言一、设计框图二、模块说明三、上板3.1、发送端3.1、接收端 四、总结 前言 上文介绍了10G/25G Ethernet Subsystem IP核使用&#xff0c;本文将在此基础上介绍40G/50G Ethernet Subsystem IP核的使用&#xff0c;总体区别不大。 一、设计框图 由于40G以太网需要…

嵌入式 - i.MX93 Evaluation Kit介绍

MCIMX93-EVK (i.MX 93 APPLICATIONS PROCESSOR) 1, Out of the Box [ 开箱 ] Top view i.MX 93 11x11 EVK board Back view: Board kit contents: (board, power supply, cable, software, Documentation) MCIMX93-EVK board assembled with two separate boards, MCIMX93-SOM…

《MATLAB科研绘图与学术图表绘制从入门到精通》示例:绘制伊甸火山3D网格曲面图

11.4.2小节我们使用3D曲面图可视化分析伊甸火山数据&#xff0c;本小节我们采用3D网格曲面图可视化分析伊甸火山数据&#xff0c;以展示其地形&#xff0c;具体示例代码如下。 购书地址&#xff1a;https://item.jd.com/14102657.html