全国建筑市场监管公共服务平台(四库一平台)接口数据解密

需要爬取建筑市场公司的不良行为记录

进入服务平台页面 http://jzsc.mohurd.gov.cn,点击顶部的搜索,发现返回的数据是经过加密的:

16de70d7d13efb22.png

1. 寻找返回的数据

既然数据是通过这个 url 返回的, 全局搜索url:

16de70d7cf4874d2.png

http://jzsc.mohurd.gov.cn/api/webApi/dataservice/query/comp/list?pg=0&pgsz=15
尝试全局模糊搜索 /query/comp/list,开发者工具切换到sources页签,CTRL+SHIFT+F进行全局搜索,然后点击进入JS函数,再格式化后的JS文件里面再次CTRL+F搜索:
16de70d7d185f6fe.png
返回的结果是请求 url /dataservice/query/comp/list得到的, 打上断点,重新点击页面上的搜索,一步一步调试js代码:
16de70d7cc7bd372.png
调试过程就不一步一步分析了, 最终定位到, 感觉像我们想要的数据, 进入Console打印一下te
t 中data 是 最初我们请求http://jzsc.mohurd.gov.cn/api/webApi/dataservice/query/comp/list?pg=0&pgsz=15 所返回的数据
16de70d80f416a2b.png
e 这其中的数据正是我们想要的数据
16de70d819a938c2.png

2.分析加密方式

既然我们已经知道了数据的加密方式, 那我们就重点分析一下这个地方
16de70d815d57580.png

其中t.data我们在第一步已经分出来了 使我们第一步请求 http://jzsc.mohurd.gov.cn/api/webApi/dataservice/query/comp/list?pg=0&pgsz=15得到的结果

那我们重点分析 p函数 的处理过程, 点击进入 p函数, 结果如下:
16de70d83c6fe7c3.png
对数据经过层层加密处理后,调用toString方法, 既然加密函数已经找到,我们就可以编写JS代码了

3.代码实现

我们将函数 p 的代码复制出来, data是加密后返回的数据,我们先复制出来用一下
16de70d83ff38a85.png
运行一下项目
16de70d8428e8761.png
报错的原因 , 其中 ud 没有进行初始化 我们寻找一下 u 和 d , 就在函数 p的上方
16de70d84694b588.png
我们把 u 和 d 添加到代码中
16de70d85fe30bb4.png
运行项目 进行测试
16de70d866ce3553.png

其中返回的数据 , 正是我们想要的结果

4. Python实现

到这里已经能成功使用JS解密返回的数据了,但是如果实现爬虫自动解析需要使用Python实现:

Python中AES解密可以使用Crypto库实现,具体实现代码如下:

def decrypt(text):
    key = 'jo8j9wGw%6HbxfFn'
    vi = '0123456789ABCDEF'
    # 将请求返回的16进制数据转换为二进制数据
    text = binascii.a2b_hex(text)
    # 构建解密对象
    cipher = AES.new(key.encode('utf8'), AES.MODE_CBC, vi.encode('utf8'))
    text_decrypted = cipher.decrypt(text)

    unpad = lambda s: s[0:-s[-1]]
    text_decrypted = unpad(text_decrypted)
    # 去补位
    text_decrypted = text_decrypted.decode('utf8')
    return text_decrypted
5. 最后基于Python的requests实现了简单的请求+解密代码
# -*- coding: utf-8 -*-
import json
import requests
import binascii
from Crypto.Cipher import AES


def decrypt(text):
    key = 'jo8j9wGw%6HbxfFn'
    vi = '0123456789ABCDEF'
    # 将请求返回的16进制数据转换为二进制数据
    text = binascii.a2b_hex(text)
    # 构建解密对象
    cipher = AES.new(key.encode('utf8'), AES.MODE_CBC, vi.encode('utf8'))
    text_decrypted = cipher.decrypt(text)
    unpad = lambda s: s[0:-s[-1]]
    text_decrypted = unpad(text_decrypted)
    # 去补位
    text_decrypted = text_decrypted.decode('utf8')
    return text_decrypted


if __name__ == '__main__':
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36'
    }
    # 获取到当前搜索结果, 并解密
    data = requests.get(
        'http://jzsc.mohurd.gov.cn/api/webApi/dataservice/query/comp/list?pg=0&pgsz=15&total=0&complexname='
        , headers=headers).text
    res = json.loads(decrypt(data))
    print(res)
6. 注意
  • 本文参考地址: https://www.cnblogs.com/mingyangliang/p/11875925.html
  • 平台具有防爬取策略,频繁爬取会导致封IP,可以使用IP代理,或者设置爬取间隔在1.5s
  • 所爬取数据请勿用于非法用途

PHP网站源码邯郸网站改版多少钱黔东南百姓网标王推荐安阳网站推广方案哪家好张掖至尊标王哪家好仙桃网页制作价格亳州优秀网站设计推荐绵阳高端网站设计哪家好临猗关键词排名包年推广哪家好楚雄百度竞价推荐定西关键词按天扣费公司延边高端网站设计推荐贵港建设网站黔南模板推广哪家好商洛seo推荐罗湖SEO按天收费坑梓模板制作推荐林芝百搜标王报价新余百度网站优化排名报价凉山网站设计公司萍乡百度标王报价北海网络推广报价平凉外贸网站制作价格同乐高端网站设计报价山南网站开发哪家好泰安设计网站多少钱德州网站推广工具哪家好湛江网站制作报价莱芜网站搜索优化秦皇岛网站优化塘坑网络推广价格歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化