转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/23272657
今天公司有个需求,需要做一些指定网站查询后的数据的抓取,于是花了点时间写了个demo供演示使用。
思想很简单:就是通过Java访问的链接,然后拿到html字符串,然后就是解析链接等需要的数据。
技术上使用Jsoup方便页面的解析,当然Jsoup很方便,也很简单,一行代码就能知道怎么用了:
Document doc = Jsoup.connect("http://www.oschina.net/") .data("query", "Java") // 请求参数 .userAgent("I ’ m jsoup") // 设置 User-Agent .cookie("auth", "token") // 设置 cookie .timeout(3000) // 设置连接超时时间 .post(); // 使用 POST 方法访问 URL
下面介绍整个实现过程:
1、分析需要解析的页面:
网址:http://www1.sxcredit.gov.cn/public/infocomquery.do?method=publicIndexQuery
页面:
先在这个页面上做一次查询:观察下请求的url,参数,method等。
这里我们使用chrome内置的开发者工具(快捷键F12),下面是查询的结果:
我们可以看到url,method,以及参数。知道了如何或者查询的URL,下面就开始代码了,为了重用与扩展,我定义了几个类:
1、Rule.java用于指定查询url,method,params等
package com.zhy.spider.rule;/** * 规则类 * * @author zhy * */public class Rule{ /** * 链接 */ private String url; /** * 参数集合 */ private String[] params; /** * 参数对应的值 */ private String[] values; /** * 对返回的HTML,第一次过滤所用的标签,请先设置type */ private String resultTagName; /** * CLASS / ID / SELECTION * 设置resultTagName的类型,默认为ID */ private int type = ID ; /** *GET / POST * 请求的类型,默认GET */ private int requestMoethod = GET ; public final static int GET = 0 ; public final static int POST = 1 ; public final static int CLASS = 0; public final static int ID = 1; public final static int SELECTION = 2; public Rule() { } public Rule(String url, String[] params, String[] values, String resultTagName, int type, int requestMoethod) { super(); this.url = url; this.params = params; this.values = values; this.resultTagName = resultTagName; this.type = type; this.requestMoethod = requestMoethod; } public String getUrl() { return url; } <