吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6017|回复: 21
上一主题 下一主题
收起左侧

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

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


++++++++++++++++++++++++++++++教学++++++++++++++++++++++++++++++++++++++
基础的就不说了,前程无忧的数据是放在script标签里所以,存储格式是json(如下图),看到没,前程无忧多好,数据都帮你处理好了,拿走就是

这部分代码
[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格式

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


这部分代码
[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, 下载次数: 100)


免费评分

参与人数 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
3#
busyjie 发表于 2021-10-20 18:41
膜拜大佬
4#
killerman201503 发表于 2021-10-23 23:02
催更boss
5#
wolfzsy 发表于 2021-10-25 11:33
这个怎么使用呢
6#
 楼主| 三木猿 发表于 2021-10-25 11:35 |楼主

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

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

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

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

本版积分规则

返回列表

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

GMT+8, 2026-5-19 16:27

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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