国家企业信用信息公示系统采用了加速乐和极验的反扒,并且即使拿到了cookie后,获取所有详情也很费劲,每一部分数据都是一个请求,算下来一个公司少说也有三四十个请求才能完整地获取所有数据;

主要有5个cookie(__jsluid_h, __jsl_clearance, JSESSIONID, SECTOKEN, tlb_cookie)是多次请求结果运算得出的。
下面附请求步骤及源码:
1、第一次访问http://www.gsxt.gov.cn/index.html, 得到响应,HTTP状态码521,响应内容为混淆后的js代码:<script>document.cookie=('_')+('_')+('j')+('s')+('l')+('_')+('c')+('l')+('e')+('a')+('r')+('a')+('n')+('c')+('e')+('=')+((+true)+'')+......m')+('a')+('x')+('-')+('a')+('g')+('e')+('=')+((2^1)+'')+(6+'')+(~~{}+'')+((+[])+'')+(';')+('p')+('a')+('t')+('h')+('=')+('/');location.href=location.pathname+location.search</script>,处理字符串删掉=前和;后的代码,使用python js引擎执行该段代码会得到__jsl_clearance的值,__jsluid_h 的值在headers[‘Set-Cookie’]取得。
2。带着第一步算出来的两个cookies第二次访问http://www.gsxt.gov.cn/index.html, 得到响应,HTTP状态码521,响应内容为混淆后的js代码,使用正则处理后取得我们想要的代码段,加密算法有三种,sha1,sha256和md5,直接怼就行。
3,使用第二步算出的更新后的__jsl_clearance的值和第一步的__jsluid_h 的值第三次访问http://www.gsxt.gov.cn/index.html, 得到响应,HTTP状态码200,第三次请求的headers里会有我们想要的另外三个cookies:JSESSIONID, SECTOKEN, tlb_cookie,拼接好这5个cookie就可以访问拿数据了。下面附请求脚本,注意:全流程需要使用相同的代理ip,cookie和ip是有绑定的。

ex1 = re.compile(r'(?<=cookie=).+(?=;location.href)')
ex2 = re.compile(r'(?<=;go\().+(?=\)</script>)')class GetJslCookie:"""获取jsl_cookie,加速乐cookie与ip绑定传入调用类的代理,返回jslcookie和代理(如果代理过期有变化返回新代理,后续流程携带新代理进行请求)"""def __init__(self, in_proxy):self.headers = {"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,""*/*;q=0.8,application/signed-exchange;v=b3;q=0.9","Accept-Encoding": "gzip, deflate","Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7","Cache-Control": "max-age=0","Upgrade-Insecure-Requests": "1","Referrer": "http://www.gsxt.gov.cn/index.html","Host": "www.gsxt.gov.cn","User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) ""Chrome/86.0.4240.193 Safari/537.36"}self.pro = ProxyGenerator()self.proxy = in_proxy@staticmethoddef get_hash(msg, flag):"""jsl cookie 计算"""if flag == 'md5':md5 = hashlib.md5()md5.update(msg)return md5.hexdigest()elif flag == 'sha1':sha1 = hashlib.sha1()sha1.update(msg)return sha1.hexdigest()elif flag == 'sha256':sha256 = hashlib.sha256()sha256.update(msg)return sha256.hexdigest()else:raise Exception("get_hash flag err")def jsl_cookie(self, url):"""需要进行两次请求才能获取到jsl的cookie:param url: url:return: None 函数中会对self.headers['cookie']进行赋值"""for _ in range(5):try:if self.headers.get("cookie"):del self.headers['cookie']logging.debug(f'第{_}次,jsl第一次请求,proxy={self.proxy}')rsp = RequestMethod.ip_requests(url, headers=self.headers, proxies=self.proxy)if rsp == -1:self.proxy = self.pro.get_proxy()logging.info(f"重新获取proxy={self.proxy}")time.sleep(random.random() * 2)continuefirst_js_code = re.findall(ex1, rsp.text)[0]js_ctx = execjs.compile("function cookie() {return " + first_js_code + ";}")cookie_1 = js_ctx.call("cookie") + ';' + rsp.headers.get('Set-Cookie')cookie_dict = {}for cook in cookie_1.split(';'):if len(cook.split('=')) == 2:k, value = cook.split('=')cookie_dict[k.strip()] = value.strip()logging.debug('给第二次请求的headers构造cookie')__jsl_clearance = cookie_dict.get('__jsl_clearance')__jsluid_h = cookie_dict.get('__jsluid_h')self.headers['cookie'] = f'__jsl_clearance={__jsl_clearance}; __jsluid_h={__jsluid_h}'logging.debug(f'第{_}次,jsl第二次请求,proxy={self.proxy}')rsp = RequestMethod.ip_requests(url, headers=self.headers, proxies=self.proxy)if rsp == -1:self.proxy = self.pro.get_proxy()logging.info(f"重新获取1proxy={self.proxy}")time.sleep(random.random() * 2)continueif 'document.cookie' in rsp.text:logging.debug("rsp.text 第二次还是521")self.proxy = self.pro.get_proxy()del self.headers['cookie']continue__jsl_clearance = self.get_jsl_clearance(json.loads(re.findall(ex2, rsp.text)[0]))if __jsl_clearance:logging.debug(f'第{_}次,获取__jsl_clearance成功')return f'__jsl_clearance={__jsl_clearance}; __jsluid_h={__jsluid_h}', self.proxyexcept Exception as exp:self.proxy = self.pro.get_proxy()logging.error(f'获取__jsl_clearance异常--{exp},eline-{exp.__traceback__.tb_lineno}')def get_jsl_clearance(self, data):"""获取jsl_clearance参数"""chars = data.get('chars')bts = data.get('bts')c_t = data.get('ct')h_a = data.get('ha')for chars_1 in chars:for chars_2 in chars:__jsl_clearance = bts[0] + chars_1 + chars_2 + bts[1]if self.get_hash(__jsl_clearance.encode('utf-8'), h_a) == c_t:return __jsl_clearancereturn None

国家企业信用信息查询工商数据爬虫相关推荐

  1. 国家企业信用信息公示系统爬虫

    本文仅供学习交流使用,请勿用于商业用途或不正当行为 如果侵犯到贵公司的隐私或权益,请联系我立即删除 国家企业信用信息公示系统及30多个省份的子系统均采用了加速乐的反扒,仔细研究可发现其主要的5个coo ...

  2. 国家企业信用信息公示系统爬虫——流程分析

    本文仅供学习交流使用,请勿用于商业用途或不正当行为 如果侵犯到贵公司的隐私或权益,请联系我立即删除 20201212更新,附上第二步js改写的代码 # 2.第二次访问http://www.gsxt.g ...

  3. 【004】国家企业信用信息公示系统-官方渠道查询企业信息

    商业活动中,难免会和一些企业打交道,那么如何了解企业的基本信息尤其是信用信息呢?在有相关需求时可以选择企某查或者天某查等第三方平台查询,也可以选择官方的"国家企业信用信息公示平台" ...

  4. JS逆向之国家企业信用信息公示系统Cookie传递

    目标地址 http://www.gsxt.gov.cn/corp-query-entprise-info-xxgg-100000.html 分析 POST http://www.gsxt.gov.cn ...

  5. 艺赛旗(RPA)国家企业信用信息公示系统验证码破解(一)

    目前艺赛旗RPA已经更新到8.0版本,可以让所有用户免费下载试用http://www.i-search.com.cn/index.html?from=line1 (复制链接下载) 我们一般会通过国家企 ...

  6. Python爬虫-国家企业信用信息公示系统App

    https://blog.csdn.net/weixin_34236497/article/details/86998539 转载于:https://www.cnblogs.com/yuyu666/p ...

  7. 艺赛旗(RPA)国家企业信用信息公示系统验证码破解(二)

    艺赛旗 RPA8.0全新首发免费下载 点击下载 http://www.i-search.com.cn/index.html?from=line1 为了验证码破解的稳定性,这里选择 selenium+C ...

  8. 国家企业信用信息公示系统每年申报登录提示账号不存在【山东】

    首页 点击右上角登陆 后,无论尝试登陆 还是忘记密码都显示账号不存在 点击这个,就可以用统一信用代码/注册号正常登陆了

  9. 通过动态获取cookie爬取国家企业信用信息公司系统

    https://blog.csdn.net/fenglei0415/article/details/81865379 转载于:https://www.cnblogs.com/yuyu666/p/105 ...

  10. 【爬虫】关于企业信用信息公示系统-加速乐最新反爬虫机制

    ( ̄▽ ̄)~*又得半夜修仙了,作为一个爬虫小白,花了3天时间写好的程序,才跑了一个月目标网站就更新了,是有点悲催,还是要只有一天的时间重构. 升级后网站的层次结构并没有太多变化,表面上是国家企业信用信 ...

最新文章

  1. BZOJ4568: [Scoi2016]幸运数字(线性基 倍增)
  2. MATLAB神经网络样本数量太大,MATLAB搭建bp神经网络的误差特别大,但R2的值也大,求解帮我看看我的网络哪里出问题了...
  3. java开发都需要学什么
  4. 浏览器版本不支持页面示例 supper.html
  5. python import 路径设置
  6. devsecops_什么是DevSecOps?
  7. 代码管理和检查平台汇总
  8. zxr10交换机配置手册vlan_中兴ZXR10 G系列交换机SVLAN使用指导
  9. mysql数据库理论与实战
  10. C++:n个清屏函数(缓冲清屏不闪屏)
  11. spring整合kaptcha验证码
  12. Pytorch之反向传播
  13. 一起学习MySQL(基础阶段已完结)
  14. 斐波那契数列的几种求解方法
  15. 整流-1.输入电压角度计算
  16. iis信息服务器win8,win8配置iis服务器
  17. String.intern()
  18. 马云控股“文化中国”暗藏啥玄机?
  19. S7-200SMART PLC的IP更改方法
  20. iphone11屏比例_介绍iPhone 11和iPhone X屏幕尺寸对比iPhone 11屏幕和i

热门文章

  1. 阿里P7级别面试经验总结,面试心得体会
  2. RFCOMM简单介绍
  3. mac安装win7流程 win7提示无法验证数字签名的解决
  4. 计算机cpu的字母,买电脑必看:CPU型号后的字母意思详解
  5. ImportError: DLL load failed while importing QtWidgets: 找不到指定的程序
  6. oracle中字符串长度计算,根据 oracle 标准计算超长字符串的长度
  7. BLE_BQB Test_Modulation Characteristics, LE Coded (S=8)_RF-PHY/TRM/BV-13-C
  8. AutoLisp从入门到放弃(十三)
  9. 数商云营销渠道管理系统解决方案:企业级营销系统类型、定位、管理
  10. 基于Neo4j构建的外贸企业关系图谱做企业相似度查询