使用技术(技术栈)
- Python:requests.Session(会话维持/接口请求)、pandas(Excel导出)
- JS逆向与复用:execjs 调用本地 JS(复用站点加密逻辑)
- 加密算法:RSA(JSEncrypt 分段加密生成 params)、AES(CryptoJS AES-ECB + Pkcs7,用于滑块点位与验证码头)
- 风控处理:滑块验证码 blockPuzzle 识别(打码平台返回滑动距离 x)、二次校验后换取业务数据、翻页抓取与去重
业务与功能介绍
- 业务背景:住建监管类平台对企业信息查询接口做了参数加密与滑块校验,常规爬虫无法直接批量获取。项目目标是实现企业分页查询数据的自动化采集与结构化导出,用于企业库分析/数据归档。
- 核心功能:
- 企业列表分页采集:按 pageNum/pageSize 拉取企业 records
- 反爬突破:还原前端加密参数(RSA/AES)与滑块验证码校验链路
- 稳定采集:requests.Session 维持校验后的状态;企业名称去重避免重复写入
- 交付产物:字段统一清洗后导出 Excel(示例文件为“云南企业数据.xlsx”)
项目实现(实现思路/流程)
- 逆向方式:从站点前端打包代码中抽离加密逻辑(main.js/mod.js),在本地通过 execjs 直接复用加密函数,避免手写还原细节
- 关键流程(接口级):
- 首次调用企业查询接口 findPage ,若返回 captchaType=blockPuzzle 则获取 original/jigsaw 图片、token、secretKey
- 将两张 base64 图片提交打码服务,得到滑动距离 x(y 固定为 5)
- 调用验证码校验接口 captcha/check (参数中 pointJson 走 AES),并生成 CaptchaVerification (AES)作为后续请求头
- 再次请求 findPage 携带 CaptchaVerification 获取真实业务数据 records
- 循环翻页采集,抽取字段(name、creditCode、legalPerson、province、city、county、address、entRegType、id 等)并写入 Excel