三脚猫水平不知道能分享点什么,总是伸手又不太好意思

第一次发帖,代码比较水,佬勿喷,谢谢!

某联招聘简单获取数据的例子_爬虫

看了大佬们发的逆向前程无忧例子

有所启发,心血来潮(摸鱼无聊- -!)想看看智联是不是能同理可得


摸索了一下发现,居然麻油加密字符串......


某联招聘简单获取数据的例子_ci_02

算了,爬都爬了 。。那就简单的写个例子吧


做了输入地区名称取得地区码逻辑

实现根据关键词查询岗位列表

小白可以参考参考


先附上一张效果图:

某联招聘简单获取数据的例子_ci_03

引用了Hutool工具包:

<dependencies>
    <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>5.8.11</version>
    </dependency>
</dependencies>

以下是代码部分:

package org.example;
 
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
 
public class Main {
    /**
     * 主函数
     * [url=home.php?mod=space&uid=952169]@Param[/url] args 命令行参数
     */
    public static void main(String[] args) {
        String searchKye="骑手"; //搜索关键字
        int pageIndex =1;       //当前页码
        int pageSize = 10;      //每页条数
        String cityName = "思明区";//您想搜索的地区,如厦门 或 海沧区   市级不带市字,区级需加区
 
        String cityCode = findCode(cityName);//根据输入的的确查询对应的地区码
       if( StrUtil.isEmpty(cityCode)){
            System.out.println("未找到该城市对应的地区码");
            return;
       }
        String randomNum=String.valueOf(Math.random()).substring(0,10);
        String url = "https://m.zhaopin.com/api/sou/search-position?" +
                "pageCode=6019" +
                "&S_SOU_FULL_INDEX=" +searchKye+//搜索关键词
                "&S_SOU_WORK_CITY=" +Integer.valueOf(cityCode)+
                "&pageIndex="+pageIndex +
                "&isEndPage=false" +
                "&pageSize=" +pageSize+//每页条数
                "&platform=7" +
                "&_v="+randomNum; // 构建搜索URL
        String result = HttpUtil.createGet(url) // 发送GET请求
                .header("User-Agent", "Apifox/1.0.0 (https://apifox.com)") // 设置请求头
                .execute() // 执行请求
                .body(); // 获取响应体
        JSONObject resultJson = new JSONObject(result); // 将响应体解析为JSON对象
        if(StrUtil.isNotEmpty(resultJson.getStr("code"))&&resultJson.getInt("code")==200){ // 判断搜索结果是否成功
            JSONArray jsonArray = resultJson.getJSONObject("data").getJSONArray("list"); // 获取职位列表
            for (int i = 0; i < jsonArray.size(); i++) { // 遍历职位列表
                JSONObject jsonObject = jsonArray.getJSONObject(i); // 获取当前职位信息
                JSONObject customJson = jsonObject.getJSONObject("cardCustomJson");
                String sb = "";
                sb+="公司名称:"+customJson.getStr("companyName")+"    "
                        +"岗位名称:"+jsonObject.getStr("name")+"    "
                        +"所在位置:"+customJson.getStr("address")+"    "
                        +"薪资范围:"+customJson.getStr("salary60")+"    "
                        +"公司规模:"+customJson.getStr("strengthLabel")+"    "
                        +"投递直达链接:"+jsonObject.getStr("positionURL");
                System.out.println(sb); // 输出职位的自定义信息
            }
        }
    }
 
 
 
    /**
     * 根据关键词查找代码
     * @param keyword 关键词
     * [url=home.php?mod=space&uid=155549]@Return[/url] 代码字符串
     */
    private static String findCode(String keyword){
        String randomNum=String.valueOf(Math.random()).substring(0,10);
        String url = "https://m.zhaopin.com/api/base-data?" +
                "keys=region_relation" +
                "&scenario=plat_mobile" +
                "&platform=7" +
                "&_v="+randomNum; // 构建搜索URL
        String result = HttpUtil.createGet(url) // 发送GET请求
                .header("User-Agent", "Apifox/1.0.0 (https://apifox.com)") // 设置请求头
                .execute() // 执行请求
                .body(); // 获取响应体
 
        JSONObject jsonObject = JSONUtil.parseObj(result); // 解析 JSON 数据
        JSONArray regionList = jsonObject.getJSONObject("data").getJSONArray("region_relation"); // 获取 region_relation 数组
        return findCode(regionList, keyword);
    }
 
    /**
     * 递归查找指定关键字在地区列表中的 code 值
     * @param regionList 地区列表
     * @param keyword 查找的关键字
     * @return 找到匹配的 region 时返回对应的 code 值,否则返回 null
     */
    private static String findCode(JSONArray regionList, String keyword) {
        for (int i = 0; i < regionList.size(); i++) {
            JSONObject region = regionList.getJSONObject(i);
            if (keyword.equals(region.getStr("name"))) {
                return region.getStr("code");
            } else {
                JSONArray sublist = region.getJSONArray("sublist");
                if (sublist != null && sublist.size() > 0) {
                    String code = findCode(sublist, keyword); // 递归调用,遍历子列表
                    if (code != null) {
                        return code; // 如果找到匹配的 region,则直接返回对应的 code 值
                    }
                }
            }
        }
        return null;
    }
 
 
 
}