通过ParserUtil进行过滤

本文介绍了一种利用Java实现的网页图片爬取方法,通过自定义解析工具类ParserUtil来筛选并下载京东搜索结果页面中的商品图片。该工具类支持通过指定标签类、属性名及属性值来精确过滤目标节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jar包

这里写图片描述

1.ParserUtil的编写

public class ParserUtil {
    /**
     * 通过确定某个标签的特定值过滤标签
     * 
     * @param html
     *            文本
     * @param tagClass
     *            标签的CLass
     * @param Name
     *            标签的元素名称
     * @param Value
     *            元素的值
     * @return
     */
    public static NodeList parseTags(String html, final Class tagClass, final String Name, final String Value) {
        try {
            Parser parser = new Parser(html); // 解析Html文本
            return parser.parse( // 设置过滤器
                    new NodeFilter() { // 实现类

                        @Override
                        public boolean accept(Node node) {
                            if (node.getClass().getName().equals(tagClass.getName()))// 先找出对应标签
                            {
                                TagNode tag = (TagNode) node; // 将标签转化为基类TagNode
                                String v = tag.getAttribute(Name); // 获得对应的标签元素的值
                                if (v != null && !"".equals(v) && v.equals(Value)) { // 与Value进行对比
                                    return true;
                                }
                            }
                            return false;
                        }
                    });
        } catch (ParserException e) {
            e.printStackTrace();
        }
        return null;
    }
}

2.使用ParserUtil爬取照片并下载在指定路径

public class SpiderParserTest3 {
    @Test
    public void test() {

        HttpClient  sender = new DefaultHttpClient();
        HttpGet get = new HttpGet("https://search.jd.com/Search?keyword=%E7%AC%94%E8%AE%B0%E6%9C%AC%20%E8%BD%BB%E8%96%84%E6%9C%AC&enc=utf-8&suggest=1.his.0.0&wq=&pvid=f56d8ab2ebff467f8b947fc96e3e4f70");
        try {
            HttpResponse execute = sender.execute(get);
            HttpEntity entity  = execute.getEntity();
            InputStream  in = entity.getContent();
            IOUtils.copy(in, new FileOutputStream("F:/a.html"));


        } catch (Exception e) {

            e.printStackTrace();
        }


    }
@Test
public void test2()
{
    try {
        String html = IOUtils.toString(new FileInputStream("F:/a.html"));
        NodeList Tags = ParserUtil.parseTags(html, ImageTag.class, "class", "err-product");//给定参数
    for (int i = 0; i < Tags.size(); i++) {//将NodeList遍历
        ImageTag img = (ImageTag)Tags.elementAt(i);//强制类型转换
        String src = img.getAttribute("src");//获得src属性
        if(src!=null) {
        HttpClient sender =  new DefaultHttpClient();
        src="https:"+src;//添加前缀
        System.out.println(src);
        HttpGet get = new HttpGet(src);
        HttpResponse response = sender.execute(get);
        HttpEntity entity = response.getEntity();
        InputStream in = entity.getContent();
        String name = FilenameUtils.getName(src);//获得文件名
        IOUtils.copy(in, new FileOutputStream("F:/LoadImage/"+name));//输出文件
        sender.getConnectionManager().shutdown();//关闭HttpClient
        }
    }
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
}

注意

因在网页上获得的图片的Src中很多都不包含Http:Https:所以应当先查看所下载图片的请求地址是哪一类,是否有Http头,如若没有需要手动拼接字符串进行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值