黑马程序员技术交流社区

标题: Java爬虫 [打印本页]

作者: linxy06    时间: 2015-11-28 00:18
标题: Java爬虫
技术上使用Jsoup方便页面的解析,当然Jsoup很方便,也很简单,一行代码就能知道怎么用了:


[java] view plaincopy
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等

[java] view plaincopy
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;  
    }  
  
    public void setUrl(String url)  
    {  
        this.url = url;  
    }  
  
    public String[] getParams()  
    {  
        return params;  
    }  
  
    public void setParams(String[] params)  
    {  
        this.params = params;  
    }  
  
    public String[] getValues()  
    {  
        return values;  
    }  
  
    public void setValues(String[] values)  
    {  
        this.values = values;  
    }  
  
    public String getResultTagName()  
    {  
        return resultTagName;  
    }  
  
    public void setResultTagName(String resultTagName)  
    {  
        this.resultTagName = resultTagName;  
    }  
  
    public int getType()  
    {  
        return type;  
    }  
  
    public void setType(int type)  
    {  
        this.type = type;  
    }  
  
    public int getRequestMoethod()  
    {  
        return requestMoethod;  
    }  
  
    public void setRequestMoethod(int requestMoethod)  
    {  
        this.requestMoethod = requestMoethod;  
    }  
  
}  
简单说一下:这个规则类定义了我们查询过程中需要的所有信息,方便我们的扩展,以及代码的重用,我们不可能针对每个需要抓取的网站写一套代码。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2