如何使用webmagic发送post请求,并解析传回的JSON

以浙江法院公开网的送达公告数据为例:
http://www.zjsfgkw.cn/TrialProcess/NoticeSDList

1.分析页面

这里写图片描述

看到参数有3个,分别是cbfy,pageno和pagesize。传回来的数据是以json形式存在:

这里写图片描述

2.json的解析方法
webmagic-extension包中提供了JsonPathSelector这种选择语言来选择数据,如我们需要取得json中的CaseNo的信息

List<String> CaseNo = new JsonPathSelector("$.list[*].CaseNo").selectList(page.getRawText());

然后得到的是一个size为10的列表。

3.main函数代码
由于webmagic有自动去重的功能,开始查了资料,网上说是需要重新编写DuplicateRemover这个类,https://www.oschina.net/question/2625566_2151021。但是其实有更加简单的方法,那就是用url+提交的参数,如第二页的数据url便是:http://www.zjsfgkw.cn/Notice/NoticeSD?cbfy=&pageno=2&pagesize=10。下面是爬前10页的代码,:

PageProcessor pageProcessor = new sd_notice();
Spider spider = Spider.create(pageProcessor);
for (int i = 1; i < 10; i++) {
    String url = null;
    Map<String, Object> nameValuePair = new HashMap<String, Object>();
    NameValuePair[] values = new NameValuePair[3];
    values[0] = new BasicNameValuePair("pagesize", "10");
    values[1] = new BasicNameValuePair("cbfy", "");
    values[2] = new BasicNameValuePair("pageno", String.valueOf(i));
    nameValuePair.put("nameValuePair", values);
    url = "http://www.zjsfgkw.cn/Notice/NoticeSD?cbfy=&pageno="+String.valueOf(i)+"&pagesize=10";
    Request request = new Request(url);
    request.setExtras(nameValuePair);
    request.setMethod(HttpConstant.Method.POST);
    spider.addRequest(request);
    }
spider.thread(3).run();  //开启三个线程来爬

参考资料:
【1】http://webmagic.io/docs/zh/posts/chx-cases/js-render-page.html
【2】https://github.com/code4craft/webmagic/issues/258
【3】https://github.com/code4craft/webmagic/issues/108

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值