Java解析网页中的超链接批量下载用

Java获取网页下超链接并保存  把本程序改造为一个输入一个起始URL及其参数之后就可以下载此URL及其参数所指定的WEB页面以及此WEB页面中HTML语言超级链接所指向的所有WEB页面(只下载一级即可)。 主要需要利用Pattern类方法和正则表达式来获取超链接 import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import j... 阅读详情

1. 使用场景

迅雷的批量下载功能不好用,还会把网页中的超链接的原文件给重命名,很烦。
另外,经常使用UNIX/LINUX系统,wget -i 命令批量下载时也需要用到下载地址列表。
现写了一个,希望对大家有帮助。

2. 找列表

打开要下载的文件所在的页面,比如我要下载centos的packages,打开的页面是清华镜像站:

https://mirror.tuna.tsinghua.edu.cn/centos-vault/7.8.2003/os/x86_64/Packages/

鼠标右键,查看网页源代码:
在这里插入图片描述
将内容全选保存到本地文件。
在这里插入图片描述

3. 分析下载地址列表

在这里插入图片描述
分析出的结果如下:
在这里插入图片描述

4. 使用下载工具下载

在这里插入图片描述

5. 源代码

package org.ray.UrlTool;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;

/**
 * @Classname UrlToolMain
 * @Date 2021/2/4 11:14
 * @Created by 236212005@qq.com
 */
public class UrlToolMain {
    public static final Map<String, String> START_PARAMS = new HashMap<>();
    public static final String PARAM_INPUT_FILE = "-i";//"C:\\Users\\23621\\Desktop\\new 12.txt"
    public static final String PARAM_OUTPUT_FILE = "-o";//"C:\\Users\\23621\\Desktop\\result.txt"
    public static final String PARAM_APPEND_PREFIX = "-p";//https://mirror.tuna.tsinghua.edu.cn/centos-vault/7.8.2003/os/x86_64/Packages/
    public static final String PARAM_DOWN_SUFFIX = "-e";//.rpm

    private static final String BREAK_LINE_SYMBOL = System.getenv("OS").toLowerCase().contains("win") ? "\r\n" : "\n";
    private static final String SYMBOL_QUO = "\"";
    private static final String SYMBOL_MINUS = "-";
    private static final String EMPTY_STR = "";
    private static final String URL_TAG_START = "<a href=\"";
    private static final String URL_TAG_END = "</a>";
    private static final int INVALID = -1;
    public static final double EXCHANGE_UNIT = 1000.00;

    public static void main(String[] args) {
        if (args == null || args.length <= 0) {
            System.out.println("There's an error according when application runs: Invalid parameters.");
            System.out.println("Description:");
            System.out.println("Use -i to specify the html source file which contains the urls, ");
            System.out.println("-o to locate an absolute path of the output file, ");
            System.out.println("-p can help you to add a prefix of each char sequence in tag <a href=\"\">, for some situation like site uses abstract path,");
            System.out.println("-e makes you can decide the file type witch you want to download.");
            System.exit(-1);
        } else {
            recordParam(args);
            File file = new File(getParam(PARAM_INPUT_FILE));
            String context = readFile(file);
            StringBuilder stringBuffer = new StringBuilder();

            int startIndex = 0;
            int endIndex = 0;
            int lastEndIndex = 0;

            long startTime = Calendar.getInstance().getTimeInMillis();
            while ((startIndex = context.indexOf(URL_TAG_START, lastEndIndex)) != INVALID) {
                endIndex = context.indexOf(URL_TAG_END, startIndex);
                String url = context.substring(startIndex, endIndex + URL_TAG_END.length());
                int firstSymbolIndex = 0;
                int secondSymbolIndex = 0;
                firstSymbolIndex = url.indexOf(SYMBOL_QUO);
                secondSymbolIndex = url.indexOf(SYMBOL_QUO, firstSymbolIndex + 1);
                if (url.endsWith(getParam(PARAM_DOWN_SUFFIX))) {
                    stringBuffer.append(getParam(PARAM_APPEND_PREFIX));
                    stringBuffer.append(url, firstSymbolIndex + 1, secondSymbolIndex);
                    stringBuffer.append(BREAK_LINE_SYMBOL);
                }
                lastEndIndex = endIndex + URL_TAG_END.length();
            }
            context = stringBuffer.toString();
            writeFile(context, new File(getParam(PARAM_OUTPUT_FILE)));

            long endTime = Calendar.getInstance().getTimeInMillis();
            System.out.println("Mission complete in " + ((endTime - startTime) / EXCHANGE_UNIT) + " sec.");
            System.exit(0);
        }
    }

    private static String getParam(String key) {
        return null == START_PARAMS.get(key) ? EMPTY_STR : START_PARAMS.get(key);
    }

    private static void recordParam(String[] args) {
        for (int i = 0; i < args.length; i++) {
            if (args[i].startsWith(SYMBOL_MINUS)) {
                START_PARAMS.put(args[i], args[i + 1]);
            }
        }
    }

    public static String readFile(File file) {
        if (!file.exists()) {
            return EMPTY_STR;
        }
        StringBuilder stringBuilder = new StringBuilder();
        try (FileInputStream fileInputStream = new FileInputStream(file)) {
            BufferedReader reader = new BufferedReader(new InputStreamReader(fileInputStream));
            String line;
            while ((line = reader.readLine()) != null) {
                stringBuilder.append(line);
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return stringBuilder.toString();
    }

    public static File writeFile(String content, File dstFile) {
        boolean isFileExist = dstFile.exists();
        if (!isFileExist) {
            try {
                isFileExist = dstFile.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
                isFileExist = false;
            }
        }
        if (isFileExist) {
            try {
                FileOutputStream fileOutputStream = new FileOutputStream(dstFile);
                fileOutputStream.write(content.getBytes(StandardCharsets.UTF_8));
                fileOutputStream.flush();
                fileOutputStream.close();
                if (dstFile.length() >= content.length()) {
                    isFileExist = true;
                } else {
                    isFileExist = false;
                    dstFile.delete();
                }
            } catch (IOException e) {
                e.printStackTrace();
                isFileExist = false;
            }
        }
        return isFileExist ? dstFile : null;
    }
}

Android中如何解析网页,获取网页中的元素内容 问题:        由于android的WebView等相关类没有提供解析html网页内容的接口,我们想要获取网页的内容并解析出我们想要的元素内容,用android的固有API是没办法了。        这里我提供两种解析html思路:第一种,使用第三方解析html库;第二种,使用JAVA与JS回调,通过JS解析html。 之前研究了一下htmlparser这个开源 阅读详情

相关推荐

网页解析

在网络爬虫的系统框架中,主过程由控制,解析,资源库三部分组成。解析是负责网络爬虫的一个部分,其负责的工作主要有:下载网页的功能,对网页的文本进行处理,如过滤功能,抽取特殊HTML标签的功能,分析数据功能。 1. 网页解析: 是来自某些网站搜集来的资料,这些资料包含编号,名称,图片,链接等等元素,在这里只是将信息从标签中提取出来 获取请求返回的页面信息,筛选出我们想要的数据就可以了,有时候我们需要去一些网站上抓取数据,要想抓取数据,就必须先了解网页结构,根据具体的网页结构,编写对应的程序对数据进行采集 2.

weixin_49349430的博客 4430

java版 - 根据多个网络url地址批量下载文件并打成一个压缩包

1.工具类 import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.regex.Matcher; imp

oYuanDaiMa1的博客 2479

JAVA爬虫批量下载网页文件

该爬虫代码可将一个多页面含有多条文件的下载地址截取到,然后将下载地址放到linux系统里在控制台输入一条命令就可以进行批量下载(还可以直接调用浏览器的接口直接下载,这个可以自行修改),代码有注释具体目的解压后有个txt文件有简单介绍。代码不是完全原创的,也是自己根据需要进行整合。

java批量下载_java+根据多个url批量下载文件

1.基本流程当我们想要下载网站上的某个资源时,我们会获取一个url,它是服务器定位资源的一个描述,下载的过程有如下几步:(1)客户端发起一个url请求,获取连接对象。(2)服务器解析url,并且将指定的资源返回一个输入流给客户。(3)建立存储的目录以及保存的文件名。(4)输出了写数据。(5)关闭输入流和输出流。2.实现代码的方法/***从网络Url中下载文件*@paramurlStr*@param...

weixin_39907591的博客 1067

Java爬虫实战抓取一个网站上的全部链接

主要介绍了JAVA使用爬虫抓取网站网页内容的方法,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧。

java抓取网页数据获取网页中所有的链接实例分享

java抓取网页数据获取网页中所有的链接实例分享,使用方法,只要实例化HtmlParser时传入网页地址就可以了

java提取网页中所有链接,使用Java的完整链接提取

小编典典您可以使用像Jsoup这样的功能强大的HTML解析器来执行此操作。有一个Node#absUrl()这不正是你想要的东西。package com.stackoverflow.q3394298;import java.net.URL;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Ele...

weixin_35282313的博客 499

人工智能训练师认证教程(5)使用MONAI进行医学影像分析的完整指南

本文介绍了使用MONAI框架进行医学影像分析的全流程。首先详细说明了环境搭建步骤,包括PyTorch和MONAI的安装配置。然后以肺部CT 3D分割为例,分步骤讲解了数据准备与预处理、3D UNet模型构建、训练配置(DiceLoss损失函数、Adam优化器等)以及训练验证循环的实现。文章还包含推理可视化方法和模型导出为ONNX格式的部署方案,并强调了医学影像分析中的数据格式适配、强度归一化、显存优化等关键注意事项。最后指出MONAI的医学专用组件可大幅简化开发流程,建议后续可探索SwinUNETR等进阶方

华为开发者布道师,天府英才计划,致力于大数据+AI 的应用创新,助力企业与个人AI创新赋能。 1207

提取网页所有资源 java_java网络爬虫——获取页面的所有超链接的内容

package com.http3;import java.util.ArrayList;import java.util.List;import org.htmlparser.Node;import org.htmlparser.NodeFilter;import org.htmlparser.Parser;import org.htmlparser.nodes.TagNode;import o...

weixin_33179060的博客 7601

告别商业软件?实测用gnina(CNN打分版)做分子对接:从安装到跑通第一个案例

本文详细介绍了基于卷积神经网络(CNN)的开源分子对接工具gnina的安装与实战应用。从环境配置、编译安装到运行第一个COVID-19主蛋白酶抑制剂对接案例,全面解析了这款替代商业软件的强大功能,特别适合预算有限的研究团队进行药物发现和虚拟筛选。

weixin_42522320的博客 255

【win10+RAGFlow+Ollama】搭建本地大模型助手(教程+源码)

在当今科技飞速发展的时代,人工智能(AI)已经成为各行各业不可或缺的一部分。特别是在文档处理和数据分析领域,AI的应用更是无处不在。今天,我要向大家介绍一个开源的AI框架引擎——RAGflow。它能够在深度文档理解方面执行检索增强生成(Retrieval-Augmented Generation,简称RAG),并且被认为是目前最优秀的RAG框架之一。本文将详细探讨RAGflow的创新功能、技术特点以及如何在实际应用中发挥其最大潜力。

Yooao的博客 9618

批量下载微信网页图片

各位LSP,经常看微信公众号吧,有时候看下喜欢的图片,只能一张张右键下载吧,很是麻烦。今天给我大家分享一下批量下载微信网页上的图片。不过笔者是学Java的,代码是用Java写的,其他语言的话请各位大佬按照思路自己转换哈。!

DS_Watson的博客 1331

【VAX 小番茄安装详细步骤】

本文详细介绍了在VS2022环境下安装Visual Assist X(番茄助手)的步骤及常见问题解决方案。主要内容包括:安装前的兼容性设置(需修改为Windows7兼容模式)、安装流程(卸载旧版本、勾选对应VS版本、替换关键dll文件)以及常见问题处理(如安装失败、工具栏图标缺失等)。文章提供了完整的下载链接和操作截图,特别强调了安装失败后的清理方法(注册表、安装目录和残余文件删除)。最后给出了安装成功后的测试运行指引。

qq_23962581的博客 1714

JAVA获取网页中的电影下载地址小程序

现在电影资源越来越少了,今天想看看吸血鬼日记,结果网上搜出的网址不支持迅雷批量下载,我一个一个点,很累。于是就看看网页源代码发现影片都以FTP开头,rmvb结尾。于是就写了个小程序能够获取网页中所有的下载地址。废话不多说了,下面看代码 package com.cc.getMov

橙子伯爵学习生活 3274

别再为Word转PDF表格变形发愁了!Aspose.Words for Java 19.5 保姆级避坑指南

本文详细介绍了使用Aspose.Words for Java 19.5解决Word转PDF时表格变形问题的完整方案。从格式转换原理到实战技巧,涵盖固定表格宽度、禁用自动调整、强制文本换行等核心方法,并提供高级场景应对策略和性能优化建议,帮助开发者高效处理复杂文档转换需求。

weixin_28702105的博客 266

一文搞懂多速率信号处理中信号插值的本质:从插 0、插原值到线性插值!

信号插值在数字信号处理中经常被使用,但“插值”背后究竟发生了什么,却常被忽略。插0、插原值、线性插值看似只是不同的实现方式,实则对应着完全不同的频域效应与滤波特性。本文将结合公式与MATLAB仿真,深入剖析插0、插原值与线性插值三种典型策略的本质区别。

m0_66360845的博客 917

解析html,批量下载图片(java实现)

import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; i...

mmdxgj的博客 2176

Android16 RK3576修改亮度调节为线性调节

文章摘要: 本文分析了Android系统中亮度调节的非线性问题,并提供了线性化改造方案。首先通过追踪Settings和SystemUI代码,发现亮度调节使用了BrightnessUtils类中的非线性Gamma空间转换算法。然后重点修改了BrightnessUtils类,将原有的Hybrid Log Gamma(HLG)算法替换为简单的线性映射公式。最后在自定义工具窗口中实现了基于系统标准接口的亮度调节功能,通过SeekBar的0-100%百分比值线性映射到1-255的系统亮度值。改造后的亮度调节更加直观,

tzj1058756809的博客 75

java 开发图片批量采集系统 java 批量抓取网页图片

通过html解析实现图片批量下载 1. java代码 package com.hanwei.cn; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpUR...

飞熊的博客 612

YOLOv9改进策略 | Conv篇 | 2024最新ECCV最新大感受野的小波卷积WTConv助力YOLOv9有效涨点

本文给大家带来的改进机制是一种新的卷积层,称为WTConv(小波卷积层),它利用小波变换(WT)来解决卷积神经网络(CNN)在实现大感受野时遇到的过度参数化问题。WTConv的主要目的是通过对输入数据的不同频率带进行处理,使CNN能够更有效地捕捉局部和全局特征,WTConv成功解决了CNN在感受野扩展中的参数膨胀问题,提供了一种更为高效、鲁棒且易于集成的卷积层解决方案,我将其用于二次创新YOLOv9中的RepNCSPELAN4机制可以减少一定的参数量和计算量,达到一个可观的轻量化作用。

Snu77的博客 1541

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

JAVA读取网页里超链接资源到本地

简单介绍: 网址:http://introcs.cs.princeton.edu/java/data/ 这是算法那本书配套的网站,在上面那个网址中,存放的是各个测试数据文本文件,在该网页中,以表格的形式列出了测试数据的文件,现在需要从这个网页中下载这些测试数据的文本文件,代码如下: 另外,需要在下载jsoup.jar文件导入到项目中   import java.io.Buffered

zhaoxinglin123的专栏 3341

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

用Java批量下载PDF

Internet当中有着无数的标准和规范,其中IETF(因特网工程任务组)中的RFC就达到几千个http://ietfreport.isoc.org/rfc/PDF/,包括http协议,uri等等。最近学习时常常看到参考书上提到各种RFC,每次下载实在有些麻烦,正好在学习相关内容,于是就写了个程序将官网上六千多个pdf文档下载下来。在这里跟大家分享。 整体思路: 首先从RFC列表的页面

Spring , Hadoop, Spark , BI , ML 6341

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

批量下载网页中所有的PDF文档

某日要下载网页中所有的PDF文档,大约400个。作为计算机专业的学生,显然不能手工去下载啊!!!于是在网上找到了相关的批量下载文档脚本,众里寻他千百度,终于在一篇博客http://blog.youkuaiyun.com/waylife/article/details/41021641中找到最贴切的脚本代码。 然而,我略加修改,始终会出现问题,对于从未爬过虫的小白,慢慢的开始分析网页结构:      对于上

dllTimes 2万+

java中用jsoup抓取网页源码,并批量下载图片

一、导入jsoup的核心jar包jsoup-xxx.jar jar包下载地址:jsoup-1.8.2.jar        中文API地址:http://www.open-open.com/jsoup/parsing-a-document.htm 二、java中用jsoup抓取网页源码,并批量下载图片 package com.dgh.test; import java.io.File;

光华小丸子 1万+

如何在一些没有批量下载按钮的网址(只有单独下载按钮)批量下载文件

周末发现追已久的灵异电台主播早已将音频文件上传到自己的网址里,http://117.131.187.206:90/,月夜书单,充满惊喜去看,结果只能一首一首下载,上百首音频文件,还是带密码的网易云链接。工科的我于是想写一个Java程序来代替我去整理下载链接,和提取码,然后交给百度云转存助手啦。 下载链接: 源码:https://download.youkuaiyun.com/download/goole...

goolete的博客 2万+

Java 下载指定网页的指定图片到本地电脑

Java 下载指定网页的全部图片到本地电脑Java 下载指定网页的全部图片到本地电脑1.功能需求2.实现分析3.获取网页源码并打印2.写一个测试 Demo3.调用 TinyMCE 组件渲染下该文本域4.效果演示5.源码地址 Java 下载指定网页的全部图片到本地电脑 系统:Win10 JDK:1.8.0 IDEA:2017.3.2 1.功能需求 给一个指定网页链接,能够下载改网页上的全部图片到本地电脑的指定文件夹 - 例:https://www.veer.com/topic/913/ 2.实现分析 1

李晋江的博客 1411
上一篇: UNIX环境高级编程-1.4-列出一个目录中的所有文件
下一篇: Free12.2 安装Oracle JDK1.8
相信光的疯子
博客等级 码龄18年 91粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值