使用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 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。一个简单小巧且精致的爬虫程序就此完成。

你可能感兴趣的:(数字员工,爬虫,PlayWright)