吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3521|回复: 14
收起左侧

[Java 原创] 智联招聘简单爬取数据例子

  [复制链接]
459 发表于 2023-12-15 11:06
混迹论坛多年,三脚猫水平不知道能分享点什么,总是伸手又不太好意思
第一次发帖,代码比较水,佬勿喷,谢谢!



看了大佬发的逆向前程无忧例子https://www.52pojie.cn/thread-1752766-1-3.html
有所启发,心血来潮(摸鱼无聊- -!)想看看智联是不是能同理可得

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


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

做了输入地区名称取得地区码逻辑
实现根据关键词查询岗位列表
小白可以参考参考

先附上一张效果图:

测试.png


引用了Hutool工具包:
[XML] 纯文本查看 复制代码
    <dependencies>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.11</version>
        </dependency>
    </dependencies>




以下是代码部分:
[Java] 纯文本查看 复制代码
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;
    }



}

110259w2tlg178f2llxbx5.png

免费评分

参与人数 1吾爱币 +7 热心值 +1 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

lxb187 发表于 2023-12-21 11:29
459 发表于 2023-12-15 14:39
没考虑那么多因素,只是单纯的采了一下,没搞得那么完善

也是很不错的,为你这种精神打call。话说现在大数据一下子就不火了,数据采集这块也不待人见了,好难啊,大兄弟这块还有啥更好的前途方向建议嘛?
mcby 发表于 2023-12-15 14:10
lxb187 发表于 2023-12-15 14:30
现在不封ip的嘛 可以直接采集嘛?给大兄弟点赞666666*10086*10000*10001
 楼主| 459 发表于 2023-12-15 14:39
lxb187 发表于 2023-12-15 14:30
现在不封ip的嘛 可以直接采集嘛?给大兄弟点赞666666*10086*10000*10001

没考虑那么多因素,只是单纯的采了一下,没搞得那么完善
jr001 发表于 2023-12-15 15:21
学习了感谢
Jave007 发表于 2023-12-15 16:25
有Python版本的吗?
 楼主| 459 发表于 2023-12-15 16:28
Jave007 发表于 2023-12-15 16:25
有Python版本的吗?

把我代码copy过去gpt转一下就行了
FruitBaby 发表于 2023-12-15 19:46
jsoup爬虫很方便,
liuhuacong 发表于 2023-12-15 21:59
感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 17:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表