使用PlayWright技术实现Boss直聘爬虫

笔者之前使用RPA工具-来也Uibot给公司人事开发了一款岗位薪酬爬虫程序,感觉这种工具还是是给不太懂开发的大众小白用的,不太灵活,也没有强大的技术栈做支撑,后来发现了谷歌的puppeteer技术,非常喜欢,感觉这才是程序员需要的开发工具,但puppeteer 只支持NodeJs,对于C++、Java、Python技术栈的我来说,感觉还是不够方便,再后来又遇到了PlayWright:Puppeteer团队跳槽到微软开发的同类技术,但除了Js还支持Java,Python和C#等多种语言。不错!就是你了,于是笔者拿PlayWright重写了之前那款爬虫,实现思路也很简单,大致如下:

1)依次创建PlayWright、Browser、BrowserContext等对象,

String keyword = "Java工程师";
        List<String> pwArgs = new ArrayList<>();
        pwArgs.add("--start-maximized");
        try (Playwright playwright = Playwright.create()) {
            Browser browser = playwright.chromium().launch(new           BrowserType.LaunchOptions().setArgs(pwArgs).setHeadless(false));
            BrowserContext context = browser.newContext(new Browser.NewContextOptions().setViewportSize(null));
。。。

2)创建一个页面并跳转到boss直聘页面

Page page = context.newPage();
            page.addInitScript("Object.defineProperties(navigator, {webdriver:{get:()=>undefined}});");
            String url = "https://www.zhipin.com/";
            System.out.println(url);
            page.navigate(url);

3)使用PlayWright提供的API,在搜索栏中输入岗位关键词,点击搜索按钮,并拦截“https://www.zhipin.com/wapi/zpgeek/search/joblist.json”接口获取相关岗位信息

page.locator("input[name='query']").fill(keyword);
            Response rs = page.waitForResponse(
                    r -> r.url().contains("https://www.zhipin.com/wapi/zpgeek/search/joblist.json") && r.ok(),
                    () -> page.locator("text='搜索'").click()
            );

4)解析拦截返回的岗位信息,并存储到Excel文件中

SONObject json = new JSONObject(rs.text());
            JSONObject zpData = (JSONObject) json.get("zpData");
            JSONArray jobList = zpData.getJSONArray("jobList");
            System.out.println(jobList);
            saveFile(jobList);

测试运行,一切OK。一个简单小巧且精致的爬虫程序就此完成。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值