本帖最后由 eoven8 于 2023-12-16 15:59 编辑
混迹论坛多年,三脚猫水平不知道能分享点什么,总是伸手又不太好意思 第一次发帖,代码比较水,佬勿喷,谢谢! 有所启发,心血来潮(摸鱼无聊- -!)想看看智联是不是能同理可得
摸索了一下发现,居然麻油加密字符串...... 算了,爬都爬了 。。那就简单的写个例子吧
做了输入地区名称取得地区码逻辑 实现根据关键词查询岗位列表 小白可以参考参考
先附上一张效果图: 引用了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; } }
注:若转载请注明大神论坛来源(本贴地址)与作者信息。
|