当前位置:首页 > 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
分享给朋友:

相关文章

java如何编译

java如何编译

编译Java程序的基本步骤 安装JDK(Java Development Kit)并配置环境变量。确保javac和java命令可在命令行中运行。JDK是编译和运行Java程序的必备工具。 创建Jav…

如何自学java

如何自学java

选择合适的学习资源 从官方文档开始,Oracle提供的Java官方教程(Java Tutorials)是权威且免费的学习资料。在线平台如Codecademy、Coursera或Udemy提供互动式课程…

如何卸载java

如何卸载java

卸载Java的步骤 Windows系统卸载方法 打开控制面板,选择“程序和功能”或“卸载程序”。在列表中找到Java相关条目(如“Java 8 Update 251”),右键选择卸载并跟随向导完成操…

vue实现图片切换

vue实现图片切换

实现图片切换的方法 使用v-for和v-bind动态绑定图片 通过v-for循环渲染图片列表,结合v-bind动态绑定图片路径,实现切换效果。 <template> <div&…

php 实现 java md5加密

php 实现 java md5加密

PHP 实现 Java MD5 加密 Java 和 PHP 的 MD5 加密结果可能存在差异,主要由于字符编码和输出格式的不同。以下是确保 PHP 与 Java MD5 加密结果一致的方法。 确保字…

js实现图片滚动

js实现图片滚动

图片滚动的实现方法 使用CSS动画实现 通过CSS的animation和@keyframes可以实现简单的图片滚动效果。这种方法适合静态图片的无缝循环滚动。 <style> .scr…