IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 爬取全国建筑市场监管服务平台(四库一平台)小程序数据 -> 正文阅读

[移动开发]爬取全国建筑市场监管服务平台(四库一平台)小程序数据

最近因为需要建筑行业的企业的数据,就在网上找了一圈,然后看见全国建筑市场监管服务平台,然而访问了一下,平台的验证码不好搞,而且接口返回的数据还是加密的。在网上又看了一下,好像四库一平台还有小程序,研究了一下,小程序没有验证码的问题,决定搞一下,下面是我爬取的一些心得,不喜勿喷,谢谢!

下面是全国建筑市场监管服务平台(四库一平台)小程序的页面

在这里插入图片描述

一、使用Fiddler爬虫抓包工具抓取小程序访问链接

我比较喜欢使用Fiddler抓包工具,怎么安装和使用我在这里就不介绍了,自己去网上百度。通过Fiddler抓取到小程序的访问链接。

在这里插入图片描述

通过分析小程序的接口,我发现我们需要的就两个接口地址:
https://sky.mohurd.gov.cn/skyapi/api/statis/getResult
https://sky.mohurd.gov.cn/skyapi/api/statis/getExtResult
主要是通过改变keys值得方式去获取不同的数据的。

二、分析接口的请求

1.下面是接口的请求头

GET https://sky.mohurd.gov.cn/skyapi/api/statis/getResult?_t=0.8169400931262218&pageNumber=1&pageSize=10&keys=corp%2Fdata_search%2Fpage HTTP/1.1
Host: sky.mohurd.gov.cn
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat
cityCode: 510107
content-type: application/json
token: t_5fecc09e12534724bf1056f7a083cda5
Referer: https://servicewechat.com/wx8f070e7958a940d1/41/page-frame.html
Accept-Encoding: gzip, deflate, br

2.用Java写的爬取的代码

import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSONObject;

public class DemoTest {

    public static void main(String[] args) {
        String respJson = HttpRequest.get("https://sky.mohurd.gov.cn/skyapi/api/statis/getResult?_t=0.8169400931262218&pageNumber=1&pageSize=10&keys=corp/data_search/page")
                .header("content-type", "application/json")
                .header("token", "t_5fecc09e12534724bf1056f7a083cda5")
                .header("Host", "sky.mohurd.gov.cn")
                .header("Referer", "https://servicewechat.com/wx8f070e7958a940d1/41/page-frame.html")
                .header("cityCode", "510107")
                .header("User-Agen", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat")
                .timeout(20000)//超时,毫秒
                .execute().body();
        System.out.println(respJson);
        JSONObject jsonObject = JSONObject.parseObject(respJson);
        String data = jsonObject.getString("data");
        System.out.println(DecryptData.decryptData(data));
    }
}

接口返回:
在这里插入图片描述

这是小程序企业列表的请求地址,小程序也是做了防爬手段的,虽然不像PC端那么多,但是也有。这里可以直接获取到接口请求的token的,按照他的请求头就可以直接请求,小程序的列表最多只能返回150条数据,这是个坑,其他详情接口没有这个限制。
当访问量上去之后,IP会被封,想要爬取数据最好还是要使用IP代理。

三、数据做AES解密

1.接口返回的数据:

{"status":1,"data":"IZgvAGrUV31JJr52HNx0ahGAcuOGR/CyJmx2mLq/hwDhz12YxhKj8lNCLWc9oyTIrTzhQRPbWX5r...............","message":null}

2.需要我们做AES解密,下面是通过写的Java解密代码:

import cn.hutool.crypto.Mode;
import cn.hutool.crypto.Padding;
import cn.hutool.crypto.symmetric.AES;
/**
 * 解密数据
 */
public class DecryptData {


    public static void main(String[] args) {
        String data = "IZgvAGrUV31JJr52HNx0ahGAcuOGR/CyJmx2mLq/hwDhz12YxhKj8lNCLWc9oyTIrTzhQRPbWX5rFKnyY8pcV+pjJ1IAEkiRSaY.......";
        String key = "xxxxxxxxxxxxxxxxxxxxxxxxxxx";
        AES aes1 = new AES(Mode.ECB, Padding.PKCS5Padding, hexToByte(key));
        System.out.println(aes1.decryptStr(data));
    }

    public static byte[] hexToByte(String hex) {
        int len = hex.length() / 2;
        byte[] result = new byte[len];
        for (int i = 0; i < len; i++)
            result[i] = Integer.valueOf(hex.substring(2 * i, 2 * i + 2), 16).byteValue();
        return result;
    }
}


3.解密后的数据:

[
    {
        "data":{
            "asc":true,
            "current":10,
            "limit":15,
            "offset":135,
            "offsetCurrent":135,
            "openSort":true,
            "optimizeCount":false,
            "pages":14,
            "records":[
                {
                    "legalMan":"张三",
                    "address":"云南省迪庆藏族自治州香格里拉市建塘镇乡巴",
                    "regionFullname":"云南省-迪庆藏族自治州",
                    "corpName":"云南XXX建筑工程有限公司",
                    "id":"002105291321963827",
                    "corpCode":"91530381MA6P2QDXXX"
                },
                {
                    "legalMan":"封于修",
                    "address":"重庆市九龙坡区滩XXXX",
                    "regionFullname":"重庆市",
                    "corpName":"重庆XX建设工程有限公司",
                    "id":"002105291241608685",
                    "corpCode":"915001076889206XXK"
                }
            ],
            "searchCount":true,
            "size":15,
            "total":200
        }
    }
]

由于各种相关原因,我就不把key写在文章中了,我可以大体写下怎么去找key,我是用手机模拟器安装微信和RE文件管理器,访问小程序,模拟器会把小程序的源码包下载到文件中,通过文件管理器找到一个后缀为.wxapkg的文件,反编译后再通过微信开发工具打开就可以找到加密的key。具体怎么操作可以搜索获取小程序源码。

第一次写,有问题大家可以交流,学习。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-12-23 15:51:56  更:2021-12-23 15:53:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:10:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码