使用java网络爬虫爬取BOSS直聘岗位信息

一、目的

  • 得到招聘网站中自己想要的相关数据
  • 对HTML进行清洗,保留想要的数据并导出到Excel

二、java实现过程

  • 导入相关架包
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.16.18</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.jsoup/Jsoup -->
    <dependency>
      <groupId>org.jsoup</groupId>
      <artifactId>Jsoup</artifactId>
      <version>1.11.3</version>
    </dependency>
    <!-- excel相关 -->
    <dependency>
      <groupId>com.xuxueli</groupId>
      <artifactId>xxl-excel</artifactId>
      <version>1.0.0</version>
    </dependency>

    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>4.5.13</version>
      <scope>compile</scope>
    </dependency>
  • WorkInfo工作信息实体类
import lombok.Data;
import lombok.ToString;
import java.util.List;

@Data
@ToString
public class WorkInfo {

    String jobName;//职位名称
    String jobArea;//工作地区
    String jobPubTime;//发布时间
    String education;//学历
    String jobLimit;//限制(工作n年经验、在校/应届)
    List<String> tags;//标签
    String detailUrl;//职位详细详细url
    WorkDetail workDetail;//岗位要求详细信息
    Company company;//公司信息

}

  • Company公司实体类
在这里插入代码片
  • 主类GetWorkInfo
  • 这里注意修改第83行的cookie_value,
package org.example;

import com.xuxueli.poi.excel.ExcelExportUtil;
import org.example.bean.Company;
import org.example.bean.WorkInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.FileWriter;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;

@Slf4j
public class GetWorkInfo {

    private static List<WorkInfo> all = new LinkedList<>();
    public static void main(String[] args) {

        // 注意几个请求参数
        String workName="java";//职业名称

        for (int i = 1; i < 5; i++) {//当前页码i
            String url = "https://www.zhipin.com/c101280100/?query="+workName+"&page="+i+"&ka=page-"+i;

            String html = getHtml(url);
            cleanHtml(html);
        }

        System.out.println("一共获取到"+all.size()+"条与["+workName+"相关]的招聘信息");
        for (WorkInfo workInfo : all) {

            System.out.println(workInfo);
        }

        //保存所有workinfo tag 到文本
        FileWriter writer;
        try {
            writer = new FileWriter("E:/tags.txt");

            for (WorkInfo workInfo : all) {
                for (String tag : workInfo.getTags()) {
                    writer.write(tag+"  ");
                }
            }
            writer.flush();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        //保存数据到excel
        ExcelExportUtil.exportToFile( all,"E:\\re.xls");
    }

    /**
     * 模拟浏览器请求,获取网页内容
     * @param url
     * @return
     */
    public static String getHtml(String url)  {
        CloseableHttpClient httpClient = null;
        CloseableHttpResponse response = null;
        String result = "";

        // 通过址默认配置创建一个httpClient实例
        httpClient = HttpClients.createDefault();
        // 创建httpGet远程连接实例
        HttpGet httpGet = new HttpGet(url);
        // 设置请求头信息,鉴权
        httpGet.setHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.54");
        //cookie需要手动到网站获取
        httpGet.setHeader("Cookie", "_bl_uid=2ak8Cl39wtUayvud03U7415wmn52; lastCity=101280100; wt2=DnjgeQY_6OeBVy04-sQp4F_CiAIn9dJpTlC0K33an6klsXW3bnjH4lQPp5AZUW0EQ3xLYz60xQVWaN623Hku8wg~~; Hm_lvt_194df3105ad7148dcf2b98a91b5e727a=1622131357,1622216304,1622278889,1622299753; __g=-; __c=1622299753; __l=l=/www.zhipin.com/c101280100/?query&r=&g=&s=3&friend_source=0&s=3&friend_source=0; __a=83640636.1614948744.1622278840.1622299753.344.24.10.344; Hm_lpvt_194df3105ad7148dcf2b98a91b5e727a=1622305422; __zp_stoken__=4157cYS0UJAEtPDc2DHNwVwlPanNjEH1dPlJtWHRGBA4VJj90f1dVB0VIfFRaeB4FJmQSAFkUXBIrUElmDTACJgJgazwMRXNFNFsHCDEZPVNSWFxLYWgDbRAhN3kHUkN4FkcCPV9HVmdcYHlG; __zp_sseed__=+TM8nqRm+BG8IPVh+stoLe4NGHJh2C4AO17GaA5dk1s=; __zp_sname__=9f0a9905; __zp_sts__=1622305425603");

        // 设置配置请求参数
        RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000)// 连接主机服务超时时间
                .setConnectionRequestTimeout(35000)// 请求超时时间
                .setSocketTimeout(60000)// 数据读取超时时间
                .build();
        // 为httpGet实例设置配置
        httpGet.setConfig(requestConfig);
        // 执行get请求得到返回对象
        try {
            response = httpClient.execute(httpGet);
            // 通过返回对象获取返回数据
            result = EntityUtils.toString(response.getEntity());
        } catch (IOException e) {
            e.printStackTrace();
        }

        return result;
    }

    public static Object cleanHtml(String html){
        org.jsoup.nodes.Document document = (org.jsoup.nodes.Document) Jsoup.parseBodyFragment(html);
        //获取body
        Element body = document.body();
        Elements jobPrimaries = body.getElementById("main").getElementsByClass("job-primary");

        //遍历所有的招聘信息
        for (int i = 0; i < jobPrimaries.size(); i++) {
            //第i条招聘信息
            Element job = jobPrimaries.get(i);
            //招聘概要信息
            WorkInfo workInfo = new WorkInfo();
            String jobName = job.getElementsByClass("job-name").get(0).text();
            String jobArea = job.getElementsByClass("job-area-wrapper").get(0).text();
            String jobPubTime = job.getElementsByClass("job-pub-time").get(0).text();
            String educationWork = job.getElementsByClass("job-limit").get(0).getElementsByTag("p").get(0).outerHtml();
            String education = educationWork.substring(educationWork.lastIndexOf("</em>")+5,educationWork.indexOf("</p>"));
            String jobLimit = job.getElementsByClass("job-limit").get(0).getElementsByTag("p").get(0).text().replace(education,"");
            String url = "https://www.zhipin.com"+job.getElementsByClass("primary-box").get(0).attr("href");
            List<String> tagList = new LinkedList<>();
            Elements tags = job.getElementsByClass("tag-item");
            for (Element tag : tags) {
                tagList.add(tag.text());
            }

            //公司信息
            Company company = new Company();
            String companyName = job.getElementsByClass("company-text").get(0).getElementsByTag("h3").text();
            String companyType = job.getElementsByClass("company-text").get(0).getElementsByTag("p").get(0).getElementsByTag("a").text();
            String benefits = job.getElementsByClass("info-desc").get(0).text();

            company.setCompanyName(companyName);
            company.setCompanyType(companyType);
            company.setBenefits(benefits);

            workInfo.setJobName(jobName);
            workInfo.setJobArea(jobArea);
            workInfo.setJobPubTime(jobPubTime);
            workInfo.setEducation(education);
            workInfo.setJobLimit(jobLimit);
            workInfo.setTags(tagList);
            workInfo.setDetailUrl(url);
            workInfo.setCompany(company);

            all.add(workInfo);
        }
        return null;
    }
}
  • 运行结果
  • 控制台输出
    技术标签文档

数据表格

上一片文章,介绍使用岗位信息进行制作云图,点击下发连接查看

使用python做云词图片

  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
爬虫是一种自动化程序,可以模拟浏览器行为来获取网页上的数据。然而,许多网站对爬虫有限制,采取了一些措施来阻止爬虫的访问。主要有两种方法可以限制爬虫的访问:一是通过robots协议告知爬虫哪些页面可以访问,哪些不可以访问;二是通过判断HTTP头来识别请求是否由爬虫引起,网站可以拒绝爬虫的请求。 如果你想爬取boss直聘的数据,可能会遇到一些反爬措施。在引用的代码块中,作者提到了一些手动改变数据信息的方法来规避反爬措施。例如,可以修改URL中的城市和职位信息来获取不同城市和职位的数据。这种方法可以在一定程度上减少被网站封禁的风险。然而,需要注意的是,这种不断改变数据信息的方法可能会使爬取的数据量较少。 根据引用中的描述,爬取boss直聘数据涉及到对不同职位的要求进行解析。例如,数据分析师要求招聘者具备一定的数据分析和挖掘能力,并且熟悉Python、SQL、Excel等软件;数据挖掘师除了数据分析和挖掘能力外,还要熟悉深度学习算法,并且一些企业还要求熟悉Java、Hadoop、Spark、SQL等技术;数据架构师需要具备数据分析、数据架构和大数据能力,熟悉Python、Java、SQL、Hadoop、Spark等软件和分布式技术;AI工程师需要对人工智能、视觉图像算法、自然语言处理、产品设计有一定了解,并且熟悉Python、C等编程语言。 综上所述,如果想要爬取boss直聘的数据,可以通过编写爬虫程序,并根据具体的需求解析网页上的职位信息和要求。同时,需要注意遵守网站的爬取规则,以避免被封禁或触发反爬措施。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python爬虫学习(一)爬取boss直聘一页数据](https://blog.csdn.net/weixin_45145550/article/details/112396820)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [爬取boss直聘数据并分析](https://blog.csdn.net/weixin_55018995/article/details/116902265)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值