JavaSpiderParser

我们从网页上获取到种种网页资源后,要想获取到有用的资源则还需要自己进行解析,解析所需要的资源有就需要一些第三方的开源jar包等。

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进行过滤找到自己需要的东西。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值