为了巩固一下Java网络编程中的知识点,结合网上一些爬虫的帖子,手写一个网页爬虫获取一下网站的信息,属于个人学习。。。应该不会去请喝茶吧2333
首先看一下效果 根据DOM结构获取表单信息 输入关键字运行程序 获得查询到标题和链接
那么问题来了,这些是啥,Spider又是啥?
首先说明一下Spider,按照百度百科上的定义:网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。其实就是个小脚本,基于关键字,搞到URL。啥?还是不明白?好吧,百度就就相当于一个写的灰常好的爬虫。。。这回明白了吧。
下面开始说明是如何实现的。
当然对于HTML的处理是实现爬虫的重点,在这个例子中,使用了是一款Java 的HTML解析器。可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
Rule.java实体类封装查询信息
package util;
/**
* 规则类
*
* @author wyq
*
*/
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;
}
}
LinkTypeDate封装查询结果信息
package util;
public class LinkTypeData
{
private int id;
/**
* 链接的地址
*/
private String linkHref;
/**
* 链接的标题
*/
private String linkText;
/**
* 摘要
*/
private String summary;
/**
* 内容
*/
private String content;
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public String getLinkHref()
{
return linkHref;
}
public void setLinkHref(String linkHref)
{
this.linkHref = linkHref;
}
public String getLinkText()
{
return linkText;
}
public void setLinkText(String linkText)
{
this.linkText = linkText;
}
public String getSummary()
{
return summary;
}
public void setSummary(String summary)
{
this.summary = summary;
}
public String getContent()
{
return content;
}
public void setContent(String content)
{
this.content = content;
}
}
MainTest.java文件进行测试(内网果然很快a)
package util;
import java.util.List;
public class MainTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
MainTest mainTest=new MainTest();
mainTest.getDatasByCssQueryUserNEU();
}
public void printf(List<LinkTypeData> datas) {
for (LinkTypeData data : datas) {
System.out.println(data.getLinkText());
System.out.println(data.getLinkHref());
System.out.println("***********************************");
}
}
public void getDatasByCssQueryUserNEU() {
Rule rule = new Rule("http://www.neupioneer.com", new String[] { "s" }, new String[] { "软件学院" }, null, -1,
Rule.GET);
List<LinkTypeData> extracts = ExtractService.extract(rule);
printf(extracts);
}
}