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

爬取全国建筑市场监管服务平台(四库一平台)小程序数据,第1张

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

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

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

一、使用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。具体怎么 *** 作可以搜索获取小程序源码。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5670673.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存