新手-99 2023-03-03 19:32 采纳率: 79.3%
浏览 28
已结题

java怎么解析网页,下载里面的图片

开门见山,先说需求:获取一个网页的源码,然后解析对应的图片地址,最后将图片下载到本地

网页:点击直达
需要下载的图片所在的地方:

img


将上图中

  • 元素里的图片(大概有一百多张)下载到本地,下载不要使用多线程,太快怕锁ip。请问该怎么做?
  • 写回答

1条回答 默认 最新

  • pzzhao 2023-03-03 19:49
    关注

    该回答引用自ChatGPT

    根据你的使用场景修改了下,你可以试试。我自己试着是好使的

    img

    Java可以使用Jsoup库来解析HTML源码,然后通过正则表达式或者CSS选择器来获取图片地址。最后使用Java的IO流将图片下载到本地。
    下面是一个简单的Java爬取图片的示例代码:

    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.URL;
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;
    public class ImageCrawler {
        public static void main(String[] args) throws IOException {
            String url = "https://pvp.qq.com/web201605/item.shtml";
            String saveFolder = "D:\\Temp";
            Document doc = Jsoup.connect(url).get();
            Elements imgs = doc.select("img[src~=(?i)\\.(png|jpe?g|gif)]");
            for (Element img : imgs) {
                try {
                    String imgUrl = img.attr("src");
                    if (imgUrl == null || imgUrl == "") {
                        continue;
                    }
                    if (!imgUrl.startsWith("http")) {
                        imgUrl = "https:" + imgUrl;
                    }
                    downloadImage(imgUrl, saveFolder);
                    System.out.println("Image " + imgUrl + " downloaded.");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        private static void downloadImage(String imgUrl, String saveFolder) throws IOException {
            URL url = new URL(imgUrl);
            InputStream in = url.openStream();
            String fileName = imgUrl.substring(imgUrl.lastIndexOf("/") + 1);
            FileOutputStream out = new FileOutputStream(saveFolder + fileName);
            byte[] buffer = new byte[1024];
            int length = 0;
            while ((length = in.read(buffer)) != -1) {
                out.write(buffer, 0, length);
            }
            in.close();
            out.close();
        }
    }
    

    这个示例代码中,首先使用Jsoup库获取指定网页的HTML源码,然后使用CSS选择器来获取所有的图片元素。接着遍历每个图片元素,获取其src属性值作为图片的地址。最后通过Java的IO流将图片下载到本地。在实际使用中,需要根据具体情况进行修改和优化。

    jsoup pom 依赖

    <dependency>
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.14.1</version>
    </dependency>
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 3月12日
  • 已采纳回答 3月4日
  • 创建了问题 3月3日

悬赏问题

  • ¥50 三种调度算法报错 采用的你的方案
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥15 对于这个问题的解释说明
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败