跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonNode.js算法

国家企业信用信息公示系统爬虫流程与验证码绕过方案

国家企业信用信息公示系统爬虫涉及复杂的 Cookie 链获取及极验验证码处理。流程包括三次页面访问初始化 Cookie、调用第三方打码平台解决滑动验证、最终构造请求解析企业详情。核心难点在于动态 JS 环境模拟与验证码参数传递。

蓝绿部署发布于 2025/1/19更新于 2026/10/795 浏览
国家企业信用信息公示系统爬虫流程与验证码绕过方案

概述

在爬取国家企业信用信息公示系统时,主要面临双重挑战:一是动态生成的 Cookie 校验机制(__jsluid_h, __jsl_clearance),二是随机出现的极验验证码(滑动或点选)。直接硬刚破解 JS 耗时较长,本方案采用分步模拟浏览器行为结合第三方打码平台的方式实现稳定抓取。

核心流程分析

1. Cookie 链初始化

网站通过多次访问建立信任会话,需按顺序完成以下三步:

  • 首次访问首页,获取 __jsluid_h 及响应生成的 __jsl_clearance。
  • 二次访问首页,更新 __jsl_clearance。此步骤涉及混淆的 JS 执行,建议先还原代码调试,再改写逻辑。
  • 三次访问,确保 JSESSIONID、SECTOKEN 及 tlb_cookie 等关键 Session 信息写入。

以下是更新 __jsl_clearance 的关键 Python 代码片段,利用 execjs 在本地模拟 Node.js 环境执行清理脚本:

import re
import execjs

def update_jsl_clearance(s, url):
    resp = s.get(url)
    js_pre = """ var document = {}; var location = {pathname:"pathname", search:"search"}; function getCookie(func, time){ func(); }; """
    # 提取并清理检测浏览器的相关代码
    js_str = js_pre + re.findall('<script>(.+?)</script>', resp.text)[0]
    replace_str = re.findall(r'function go.+?var .{7,10}=.{7,10};(.+?)var .{7,10}=new Date', resp.text)[0]
    js_str = js_str.replace(replace_str, '')
    
    # 替换 setTimeout 防止执行失败
    js_str = js_str.replace('setTimeout', 'getCookie')
    ctx = execjs.compile(js_str)
    __jsl_clearance = ctx.eval('document.cookie')
    __jsl_clearance = re.findall('__jsl_clearance=(.+?);Max', __jsl_clearance)[0]
    
    s.cookies.set('__jsl_clearance', __jsl_clearance)
    print(f'更新 cookie 成功:{__jsl_clearance}')

2. 验证码处理

当触发极验验证时,流程如下:

  1. 访问验证码接口获取 gt 和 challenge 参数。
  2. 将参数发送至第三方打码平台(如 2captcha),获取任务 ID。
  3. 等待平台返回解算结果(通常需 15-20 秒),获取 geetest_validate 等凭证。
  4. 携带凭证访问验证接口,获取 token 值。

3. 数据请求与解析

使用上述所有参数及 Cookie 构造列表页请求,解析详情页 URL 后发起最终请求,即可获取企业工商信息。

运行日志参考

1.设置 cookie 成功:1599319589.733|-1|tig5%2FrcdXMP5mCDrEIz6sGfxgDo%3D
2.更新 cookie 成功:1599319589.99|0|pZbcb9vKT%2FaYREOJJrcpgCyXgMU%3D
3.Set-Cookie 成功 (JSESSIONID, SECTOKEN, tlb_cookie)
4.获取 gt, challenge 成功:{"success":1,"challenge":"de9f8bb4499c6581b74b4e7b5f7863cd","gt":"62756445cd524543f5a16418cd920ffd"}
5.发送 2captcha 成功,获取 task_id: OK|64672632650
6.按照 2captcha 官方要求,需要等待 15-20s, 等待中...
7.OK|{"geetest_challenge":"de9f8bb4499c6581b74b4e7b5f7863cd","geetest_validate":"f5807eb51dedb1d73b","geetest_seccode":"f5807eb51dedb1d73b|jordan"}
8.获取 token 成功:34898487
9.详情页 URL 生成完毕
10.解析结果示例:{'credit_code': '91110000802100433B', 'company_name': '北京百度网讯科技有限公司', ...}

总结

该系统的核心难点在于每次搜索都接入了极验验证码,且伴随复杂的 Cookie 校验。如果去硬刚破解 JS 耗时耗力,这里我们直接使用了第三方的打码平台来辅助验证。以上流程仅供参考,实际应用中需注意频率控制与合规性。

目录

  1. 概述
  2. 核心流程分析
  3. 1. Cookie 链初始化
  4. 2. 验证码处理
  5. 3. 数据请求与解析
  6. 运行日志参考
  7. 总结

更多推荐文章

查看全部
  • GitHub Copilot 提示词工程实战指南
  • 前端 EME DRM 反录屏原理与实战代码
  • VSCode 中关闭 GitHub Copilot 功能的两种方法
  • Spring Boot Web 后端开发核心注解详解
  • DPI 系统详解:从流量感知到业务理解的关键网络能力
  • JavaScript Proxy 代理机制与核心方法详解

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online