通过Charles和Java程序爬取微信小程序、网页上的内容

背景

最近朋友让帮忙爬取微信小程序上的内容;于是网上研究了一下,并使用到了Charles、Java调用crul请求的方式去爬取内容。

准备环境

下面正式开始爬取数据

  1. 启动charles,然后使用微信小程序或者网页,在网络包列表里找到想爬的数据对应得的请求,这一步如果数据乱码点击这里在这里插入图片描述
  2. 然后右键复制 crul请求,在cmd窗口尝试一下复制的是否正确
    在这里插入图片描述
    这一步遇到一个问题;复制的crul有个 --compressed 的选项,查了一下是使用压缩算法相关的,最新的windows版crul提示不支持这个参数;
    这里直接去掉这个选项就可以解决,如下图,可能新版本不需要这个参数咯在这里插入图片描述
    crul没问题,就可以开始写程序了
  3. 这里用Java简单写了个用cmd调用crul获得结果的程序;获得结果后可以用fastJson、Jackson等将结果字符串反序列化成对象,方便后续处理。到这一步数据就爬取成功了
public class SpiderMain {
	// 这个是刚才可以正常使用的crul
    static String cmds = "curl -H \"Host: webapi2.qmai.cn\" -H \"promotion-code: \" -H \"work-wechat-userid: \" -H \"store-id: 49006\" -H \"accept-language: zh-CN\" -H \"work-staff-id: \" -H \"scene: 1256\" -H \"qm-from-type: catering\" -H \"multi-store-id: \" -H \"qm-user-token: bTuWckVbMHCrVg_gdNBL3fDOoabCg4YGQ60-_0-FzZIR8MLtoAKHZtk8yHQmgL5K\" -H \"work-staff-name: \" -H \"user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) XWEB/9129\" -H \"qz-gtd: \" -H \"qm-from: wechat\" -H \"content-type: application/json\" -H \"accept: v=1.0\" -H \"channelcode: \" -H \"xweb_xhr: 1\" -H \"gdt-vid: \" -H \"sec-fetch-site: cross-site\" -H \"sec-fetch-mode: cors\" -H \"sec-fetch-dest: empty\" -H \"referer: https://servicewechat.com/wxafec6f8422cb357b/167/page-frame.html\" --data-binary \"{\\\"appid\\\":\\\"wxafec6f8422cb357b\\\"}\" \"https://webapi2.qmai.cn/web/catering2-apiserver/user-city/get-city-list-by-sale-type\"";

    public static void main(String[] args) {
        String res = execCmd(cmds);
        System.out.println("httpResponse: " + res);
        Response response = JSON.parseObject(res, Response.class);
        System.out.println(response.toString());
    }

    private static String execCmd(String command) {
        StringBuilder output = new StringBuilder();
        Process p;
        try {
            p = Runtime.getRuntime().exec(command);
            BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                output.append(line).append("\n");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return output.toString();
    }
 }

这里我用的fastJson,首先定义model类和所需的字段,给字段加上Getter Setter
然后就可以使用这个model类调用JSON的接口,对Http返回的字符串进行反序列化
在这里插入图片描述
附上FastJson依赖

 <dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>fastjson</artifactId>
     <version>1.2.62</version>
 </dependency>
  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值