webmagic简单爬取51job信息

webmagic简单爬取51job信息

我是看的这位作者
当时发现怎么都抓取不了,差点崩溃了。还好看到了这位作者,知道了重点原因。
代码地址
具体的也就是获取解析的界面信息浏览器中的信息不一样,获取的信息存在script中,所以我们需要获取我们需要的信息。
最后利用ObjectMapper提供的readTree,返回JsonNode对象 最终获取我们需要的信息,具体核心信息如下:

//请求抓取数据
            @Component
public class JobProcessor implements PageProcessor {
    @Autowired
    private JobServiceImp jobServiceImp;
    private int count = 1;
    private String URL = "https://search.51job.com/list/080200,000000,0000,00,9,99,java,2,1.html?lang=c&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare=";
    @Override
    public void process(Page page) {
        //请求抓取数据
            //爬取解析的与页面不同,此次爬取得到数据中是以json形式存在script中
            String jsonString = page.getHtml().css("script").regex(".*SEARCH_RESULT.*").toString();
            //不为空即为招聘页
            if (!StringUtils.isEmpty(jsonString)) {
                //截取json类型字符串
                String substring = jsonString.substring(jsonString.indexOf("{"), jsonString.lastIndexOf("}") + 1);
                ObjectMapper objectMapper=new ObjectMapper();
                try {
                    //使用mapper对数据进行解析
                    JsonNode jsonNode = objectMapper.readTree(substring);
                    JsonNode array = jsonNode.get("engine_search_result");
                    if (array.isArray()) {
                        for (JsonNode node : array) {
                            //获取详情链接
                            String detailUrl = node.get("job_href").asText();
                            page.addTargetRequest(detailUrl);
                        }
                        // 获取下一页的url
                        String bkUrl = "https://search.51job.com/list/080200,000000,0000,00,9,99,java,2,"+(++count)+".html?lang=c&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare=";
//                    // 把url放到任务队列中
                        page.addTargetRequest(bkUrl);
                    } else {
                        count = 0;
                        return;
                    }
                } catch (JsonProcessingException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } else {
                //进入详情页,保存数据到实体类,再通过page.putfiled(即resultItems)给Pipeline传入数据库savePage(page);
                savePage(page);
            }
        }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值