我们从网页上获取到种种网页资源后,要想获取到有用的资源则还需要自己进行解析,解析所需要的资源有就需要一些第三方的开源jar包等。
jar包
这些为我所学习JavaSpider至今为止的jar包
1.第一个解析程序
public class SpiderParserTest {
/**
* 获取Html文件
*/
@Test
public void test()
{
HttpClient send = new DefaultHttpClient();//new一个HttpClient基类
HttpGet get = new HttpGet("http://1483104508.55555.io/From");//创建Get连接
BufferedReader bf = null;
try {
HttpResponse response = send.execute(get);// 可以获得消息头
HttpEntity entity = response.getEntity();// 获得的是请求体
InputStream content = entity.getContent();//获得内容
IOUtils.copy(content, new FileOutputStream("F:/my.html"));//写入文件
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bf != null) {//关闭流
try {
bf.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* 进行简单的解析
*/
@Test
public void test1()
{
try {
String html = IOUtils.toString(new FileInputStream("F:/my.html"));//先获取到这个文件
Parser parser = new Parser(html);//载入字符
NodeList puts = parser.parse(new NodeClassFilter(InputTag.class));
//选择需要的标签,如果使用NodeClassFilter的话可以使用已经定义好的各个标签类,其返回值为NodeList即一个Node的集合
for(int i=0;i<puts.size();i++)//遍历,注意这块不能使用For-Each
{
InputTag put = (InputTag) puts.elementAt(i);//获得标签并强制类型转换
System.out.println(put.getAttribute("name"));//打印出其name元素的值
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2.通过实现NodeFilter进行过滤
@Test
public void test1()
{
try {
String html = IOUtils.toString(new FileInputStream("F:/my.html"));//获取文件
Parser parser = new Parser(html);//载入
NodeList puts = parser.parse(new NodeFilter() {//实现NodeFilter接口
@Override
public boolean accept(Node node) {
if(node instanceof InputTag) //进行判断
{
return true;
}
return false;
}
});
for(int i=0;i<puts.size();i++)
{
InputTag put = (InputTag) puts.elementAt(i);//获取到标签并强转
System.out.println(put.getAttribute("name"));//获取属性并打印
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
NodeFilter主要就是进行HTML文本的解析,NodeClassFilter可以识别一些常见的标签,也可以通过自己实现NodeFilter进行过滤找到自己需要的东西。