解析HTML页面

通过解析HTML页面来获取页面的资源:

1、使用正则表达式来获取到我们需要的标签以及标签里的内容,存入到一个容器里,此处我选择的是使用list集合。
2、遍历list集合【我选择的是使用迭代器遍历【注意的是使用迭代器时,一对{}里只能出现一次next()方法,否则会报错,显示找不到这个类的异常,这是因为两个next(),Java程序不知道要去找哪一个next。】】用一个String字符串来存放,接着再对其进行切割,得到我们要创建的目录的文件名。
3、下载资源

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class regexHtml {
    public static void readhtml(String fileName, String fileurl) throws IOException {
        File f = new File(fileName);
        BufferedReader in = new BufferedReader(new FileReader(f));
        String str = "";
        String pattern = "<(link.*?|img.*?|script.*?)(src|href)=\"(.*?)\"";
        Pattern p = Pattern.compile(pattern);

        List<String> urlList = new ArrayList<>();
        while ((str = in.readLine()) != null) {
            Matcher regx = p.matcher(str);
            while (regx.find()) {
                urlList.add(regx.group(3));
            }
        }
        //获取迭代器对象
        ListIterator<String> it2 = urlList.listIterator();

        //循环迭代集合中的所有元素
        while (it2.hasNext()) {
            //获取到多级文件目录的名字
            String Durl = it2.next();
            System.out.println("解析出来的文件路径:" + Durl);

            //创建多级目录文件夹,path创建的目标路径
            String path = fileurl + Durl;

            File file = new File(path);
            //如果路径不存在,新建
            if (!file.exists() && !file.isDirectory()) {
                file.mkdirs();
            }

            //获取到数组的最后一个元素作为文件名
            String[] split = Durl.split("/");
            System.out.println("下载" + split[split.length - 1] + "资源");
            String fileName2 = split[split.length - 1];
          
            String downloadUrl = "目标地址" + Durl;  //如:www.baidu.com
            String savePath = fileurl + Durl + "\\";
            downloadFile(fileName2, downloadUrl, savePath);

        }
    }

    //下载资源
    public static boolean downloadFile(String fileName, String downloadUrl, String savePath) {
        boolean result = false;
        try {

            //先判断文件是否存在
            File file1 = new File(savePath + fileName);
            if (file1.exists()) {
                System.out.println("删除已存在的文件");
                file1.delete();
            }
            long begin = System.currentTimeMillis();
            URL url = new URL(downloadUrl);
            File file = new File(savePath + fileName);
            org.apache.commons.io.FileUtils.copyURLToFile(url, file);
            long end = System.currentTimeMillis();
            //System.out.println("文件下载耗时:" + (end - begin) / 1000 + "s");
            //执行到此,说明文件下载完毕
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值