吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4833|回复: 21
收起左侧

[Java 原创] java爬虫利用jsoup爬取前程无忧招聘信息数据

  [复制链接]
三木猿 发表于 2021-10-20 17:18
好久不发帖了,主要原因是因为我懒,最近想换工作了,所以写了个前程无忧的爬虫,能够爬取前程无忧的招聘信息
就这些,爬出来之后输出为csv格式的数据
image.png image.png

++++++++++++++++++++++++++++++教学++++++++++++++++++++++++++++++++++++++
基础的就不说了,前程无忧的数据是放在script标签里所以,存储格式是json(如下图),看到没,前程无忧多好,数据都帮你处理好了,拿走就是
image.png
这部分代码
[Java] 纯文本查看 复制代码
URL url = new URL("https://search.51job.com/list/020000,000000,0000,00,9,99,"+name+",2,1.html?lang=c&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare=");
            Document document = Jsoup.parse(url, 4000);
            Elements script = document.getElementsByTag("script");
            String jsonString=null;
            for (Element element : script) {
                String text = element.html();
                if(!StringUtil.isBlank(text)&&text.contains("__SEARCH_RESULT__")){
                    jsonString=text.replace("window.__SEARCH_RESULT__ = ","");
                    break;
                }
            }

jsonString就是最终获取到的json格式字符串了,接下来把它转换成JSON数据就是了,拆分下json格式
image.png
JSON数据解读
其中market_ads是前程无忧官方的招聘,就是展示在最上面的公司
engine_jds是我们要的数据(所有公司的招聘信息)
total_page 是总页数
我们本次就用到这些字段,然后我们解读下engine_jds中的数据,engine_jds是个集合包含所有数据,这是其中一条数据(下图)
这些是我们需要的字段
公司名 company_name
公司主页 company_href
公司类型 companytype_text
公司规模 companysize_text
招聘主页 job_href
招聘标题名 job_title
薪资范围 providesalary_text
工作地点 workarea_text
发布日期 issuedate
工作类型 companyind_text
公司福利 jobwelf
工作区域|经验要求|学历要求|招聘人数 attribute_text
image.png

这部分代码
[Java] 纯文本查看 复制代码
if(jsonString!=null){
                    JSONObject jsonObject1=JSON.parseObject(jsonString);
                    JSONArray engine_jds = jsonObject1.getJSONArray("engine_jds");
                    for (int k = 0; k <engine_jds.size(); k++) {
                        List<String> data=new ArrayList<>();
                        JSONObject jsonObject2 = engine_jds.getJSONObject(k);
                        //公司名 company_name
                        String company_name = jsonObject2.getString("company_name");
                        data.add(company_name);

                        //公司主页 company_href
                        String company_href = jsonObject2.getString("company_href");
                        data.add(company_href);

                        //公司类型 companytype_text
                        String companytype_text = jsonObject2.getString("companytype_text");
                        data.add(companytype_text);

                        //公司规模 companysize_text
                        String companysize_text = jsonObject2.getString("companysize_text");
                        data.add(companysize_text);

                        //招聘主页 job_href
                        String job_href = jsonObject2.getString("job_href");
                        data.add(job_href);

                        //招聘标题名 job_title
                        String job_title = jsonObject2.getString("job_title");
                        data.add(job_title);

                        //薪资范围 providesalary_text
                        String providesalary_text = jsonObject2.getString("providesalary_text");
                        data.add(providesalary_text);

                        //工作地点 workarea_text
                        String workarea_text = jsonObject2.getString("workarea_text");
                        data.add(workarea_text);

                        //发布日期 issuedate
                        String issuedate = jsonObject2.getString("issuedate");
                        data.add(issuedate);

                        //工作类型 companyind_text
                        String companyind_text = jsonObject2.getString("companyind_text");
                        data.add(companyind_text);

                        //公司福利 jobwelf
                        String jobwelf = jsonObject2.getString("jobwelf");
                        data.add(jobwelf);
                        //工作区域|经验要求|学历要求|招聘人数 attribute_text
                        JSONArray attribute_text = jsonObject2.getJSONArray("attribute_text");
                        String collect = attribute_text.stream().map(String::valueOf).collect(Collectors.joining("|"));
                        data.add(collect);
                        //工作区域
                        // String address=attribute_text.getString(0);
                        //经验要求
                        // String experience=attribute_text.getString(1);
                        //学历要求
                        // String education=attribute_text.getString(2);
                        //招聘人数
                        // String recruitsNumber=attribute_text.getString(3);
                        list.add(data);
                    }
                }

            }

然后我们获取到了所有数据,至于想咋处理这些数据,我是输出csv,这部分就不说了,自己看代码吧
代码: demo.zip (6.3 KB, 下载次数: 97)


免费评分

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

查看全部评分

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

wolfzsy 发表于 2021-10-25 11:37
三木猿 发表于 2021-10-25 11:35
你是想要数据还是想学习爬虫,获取数据我就直接帮你弄吧,搭建java运行环境比较麻烦

我是想要数据,前程无忧的一些招聘职位,以及公司
 楼主| 三木猿 发表于 2021-10-26 10:17
yu17863200980 发表于 2021-10-26 10:03
在论坛见到过一个分享的

一次性的爬,boss的反爬让所有的爬虫不能批量,所以网上没有批量爬虫
IsMe9666 发表于 2021-10-20 17:29
busyjie 发表于 2021-10-20 18:41
膜拜大佬
killerman201503 发表于 2021-10-23 23:02
催更boss
wolfzsy 发表于 2021-10-25 11:33
这个怎么使用呢
 楼主| 三木猿 发表于 2021-10-25 11:35

你是想要数据还是想学习爬虫,获取数据我就直接帮你弄吧,搭建java运行环境比较麻烦
 楼主| 三木猿 发表于 2021-10-25 11:39
wolfzsy 发表于 2021-10-25 11:37
我是想要数据,前程无忧的一些招聘职位,以及公司

什么职位,我帮你下载
wolfzsy 发表于 2021-10-25 11:41
三木猿 发表于 2021-10-25 11:39
什么职位,我帮你下载

产品总监和销售总监
 楼主| 三木猿 发表于 2021-10-25 11:49
wolfzsy 发表于 2021-10-25 11:41
产品总监和销售总监

哪个地区的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-25 00:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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