当前位置:首页 > Java

java如何爬图片

2026-03-21 06:03:01Java

使用Jsoup库爬取图片

Jsoup是一个用于解析HTML的Java库,可以方便地从网页中提取图片链接。以下是一个简单的示例代码:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;

public class ImageCrawler {
    public static void main(String[] args) {
        String url = "https://example.com";
        try {
            Document doc = Jsoup.connect(url).get();
            Elements images = doc.select("img[src]");
            for (Element image : images) {
                String imageUrl = image.absUrl("src");
                System.out.println("Found image: " + imageUrl);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

使用HttpClient下载图片

获取图片链接后,可以使用Apache HttpClient下载图片:

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import java.io.FileOutputStream;
import java.io.InputStream;

public class ImageDownloader {
    public static void downloadImage(String imageUrl, String savePath) {
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            HttpGet request = new HttpGet(imageUrl);
            try (CloseableHttpResponse response = httpClient.execute(request)) {
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    try (InputStream in = entity.getContent();
                         FileOutputStream out = new FileOutputStream(savePath)) {
                        byte[] buffer = new byte[1024];
                        int len;
                        while ((len = in.read(buffer)) != -1) {
                            out.write(buffer, 0, len);
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

处理动态加载的图片

对于动态加载的图片(如通过JavaScript生成),可以使用Selenium WebDriver模拟浏览器行为:

java如何爬图片

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.List;

public class DynamicImageCrawler {
    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
        WebDriver driver = new ChromeDriver();
        driver.get("https://example.com");

        List<WebElement> images = driver.findElements(By.tagName("img"));
        for (WebElement image : images) {
            String imageUrl = image.getAttribute("src");
            System.out.println("Found image: " + imageUrl);
        }

        driver.quit();
    }
}

注意事项

  • 遵守目标网站的robots.txt规则
  • 设置合理的请求间隔避免被封禁
  • 处理可能出现的各种异常情况
  • 考虑使用代理IP应对反爬机制
  • 注意图片版权问题

完整流程示例

  1. 使用Jsoup解析网页获取图片链接
  2. 过滤无效或重复的链接
  3. 使用多线程提高下载效率
  4. 保存图片到本地指定目录
  5. 记录下载日志便于后续处理

标签: 图片java
分享给朋友:

相关文章

vue实现图片循环

vue实现图片循环

实现图片循环的基本方法 在Vue中实现图片循环通常使用v-for指令结合数组数据。以下是基础实现方式: <template> <div> <img v-fo…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

如何运行java

如何运行java

运行Java程序的方法 安装Java开发工具包(JDK) 确保系统已安装JDK。可通过命令行输入 java -version 检查是否安装。若未安装,需从Oracle官网或OpenJDK下载并配置环境…

vue 实现图片

vue 实现图片

Vue 实现图片加载与展示的方法 在 Vue 中实现图片加载和展示可以通过多种方式完成,包括静态资源引用、动态绑定、懒加载等。以下是几种常见的方法: 静态资源引用 将图片放在项目的 public 或…

vue实现图片循环

vue实现图片循环

实现图片循环展示 在Vue中实现图片循环展示可以通过v-for指令结合数组数据完成。以下是具体实现方式: 基础循环展示 准备图片数据数组,使用v-for渲染图片列表: <template&g…

vue实现图片单选

vue实现图片单选

Vue 实现图片单选功能 在 Vue 中实现图片单选功能可以通过多种方式完成,以下是两种常见的实现方法: 方法一:使用 v-model 和单选按钮 通过将单选按钮与图片绑定,利用 v-model 管…