本文将介绍如何通过Selenium爬取汽车之家图片,并利用阿里云通义万相AI进行图像优化处理,实现自动化获取高质量汽车图片的技术方案。
项目概述
在汽车相关的应用开发中,经常需要获取和处理汽车图片。传统方式往往面临图片质量不高、带有水印、风格不统一等问题。本项目结合Web爬虫技术和AI图像处理,提供了一个完整的解决方案:
- 
使用Selenium自动化爬取汽车之家图片 
- 
通过阿里云通义万相AI进行图像优化和品牌替换 
- 
实现自动化、高质量的汽车图片处理流水线 
技术架构
1. 图片爬取模块
图片爬取模块基于Selenium WebDriver实现,主要功能是从汽车之家网站获取指定车型的图片。
public static String getCarImage(String carInfo) {
    // 构建搜索URL
    String url = "https://sou.autohome.com.cn/zonghe?q=" + carInfo + "&entry=42";
    
    // 配置Chrome无头浏览器
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--headless=new");
    options.addArguments("--disable-gpu");
    options.addArguments("--window-size=1920,1080");
    
    WebDriver driver = new ChromeDriver(options);
    try {
        driver.get(url);
        
        // 等待目标图片元素加载
        WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(2));
        wait.until(ExpectedConditions.presenceOfElementLocated(
            By.cssSelector("img.cus-react-img")));
        
        Thread.sleep(1000); // 额外等待确保图片加载
        
        // 解析页面获取图片URL
        String pageSource = driver.getPageSource();
        Document document = Jsoup.parse(pageSource);
        Elements imgElements = document.select("img.cus-react-img");
        
        if (!imgElements.isEmpty()) {
            Element firstImg = imgElements.first();
            String imgUrl = firstImg.attr("src");
            
            // 处理相对路径
            if (imgUrl != null && !imgUrl.isEmpty() && !imgUrl.startsWith("http")) {
                imgUrl = "https:" + imgUrl;
            }
            return imgUrl;
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        driver.quit();
    }
    return "获取图片失败";
}关键技术点:
- 
无头浏览器:使用Chrome无头模式,适合服务器环境部署 
- 
智能等待:结合显式等待和隐式等待,确保动态内容加载完成 
- 
JSoup解析:使用JSoup处理页面源码,提取目标图片元素 
- 
异常处理:完善的异常处理机制,保证程序稳定性 
2. AI图像处理模块
图像处理模块调用阿里云通义万相AI服务,对爬取的图片进行优化处理。
public static String doWork(String originImageUrl) {
    String apiKey = "sk-你的API密钥";
    String requestBody = """
        {
            "model": "wan2.5-i2i-preview",
            "function":"super_resolution",
            "size":"1024*1024",
            "input": {
                "prompt": "去除图片中的汽车之家LOGO,换成车来客三个红色的字。图像超分,图像要有合适的背景。",
                "negative_prompt": "不要有很粗糙的线条。不要出现低分辨率、差质量、低质量、残缺、比例不良等情况",
                "images": ["%s"]
            },
            "parameters": {"n": 1}
        }
        """.formatted(originImageUrl);
    
    try {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .build();
            
        // 提交图像处理任务
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://dashscope.aliyuncs.com/api/v1/services/aigc/image2image/image-synthesis"))
            .header("X-DashScope-Async", "enable")
            .header("Authorization", "Bearer " + apiKey)
            .header("Content-Type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(requestBody))
            .build();
            
        HttpResponse<String> response = client.send(request, 
            HttpResponse.BodyHandlers.ofString());
        
        // 解析任务ID并轮询结果
        JsonParse1 jsonParse1 = gson.fromJson(response.body(), JsonParse1.class);
        String taskId = jsonParse1.output.task_id;
        
        // 轮询任务状态
        request = HttpRequest.newBuilder()
            .uri(URI.create("https://dashscope.aliyuncs.com/api/v1/tasks/" + taskId))
            .header("Authorization", "Bearer " + apiKey)
            .GET()
            .build();
            
        String dealImageUrl = "";
        while (true) {
            response = client.send(request, HttpResponse.BodyHandlers.ofString());
            if (response.statusCode() == 200) {
                JsonParse1 jsonParse2 = gson.fromJson(response.body(), JsonParse1.class);
                if (jsonParse2.output.task_status.equals("SUCCEEDED")) {
                    List<Results> resultsList = jsonParse2.output.results;
                    dealImageUrl = resultsList.get(0).url;
                    break;
                } else {
                    Thread.sleep(3000); // 3秒查询一次
                }
            } else {
                dealImageUrl = "图片处理异常";
                break;
            }
        }
        return dealImageUrl;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return "图片处理异常";
}AI处理功能:
- 
Logo替换:将原图中的"汽车之家"Logo替换为"车来客" 
- 
超分辨率:提升图像分辨率到1024×1024 
- 
背景优化:为图像生成合适的背景 
- 
质量提升:消除低质量、残缺等问题 
核心实现细节
1. 异步任务处理
阿里云图像处理服务采用异步方式,需要先提交任务,然后通过任务ID轮询处理状态:
class JsonParse1 {
    Output output;
}
class Output {
    String task_id;
    String task_status;
    List<Results> results;
}
class Results {
    String url;
}2. 提示词工程
精心设计的提示词对AI处理效果至关重要:
- 
正向提示词:明确指定要执行的操作和期望效果 
- 
负向提示词:排除不希望出现的问题和缺陷 
3. 错误处理机制
- 
网络请求超时处理 
- 
任务状态异常处理 
- 
图片URL格式验证 
部署注意事项
1. 环境配置
// JDK版本兼容性处理
// System.setProperty("webdriver.chrome.driver", 
//     "src/main/resources/chromedriver-win64/chromedriver.exe");2. 资源管理
确保正确管理浏览器驱动和网络连接资源,避免内存泄漏。
应用场景
- 
汽车电商平台:自动获取和处理商品图片 
- 
汽车媒体:批量处理汽车评测图片 
- 
汽车数据服务:构建标准化的汽车图片库 
- 
营销素材生成:快速生成品牌统一的宣传图片 
优化建议
- 
性能优化: - 
实现图片缓存机制 
- 
批量处理多个图片请求 
- 
使用连接池管理HTTP连接 
 
- 
- 
功能扩展: - 
支持更多图片源网站 
- 
添加多种AI处理模板 
- 
实现图片质量自动评估 
 
- 
- 
稳定性提升: - 
增加重试机制 
- 
实现故障转移 
- 
添加监控和告警 
 
- 
总结
本项目展示了如何将Web爬虫技术与AI图像处理相结合,解决实际业务中的图片获取和处理需求。通过Selenium实现可靠的网页内容抓取,结合阿里云通义万相的强大AI能力,实现了自动化、智能化的图片处理流水线。
这种技术组合不仅适用于汽车领域,还可以扩展到其他需要大量图片处理和优化的应用场景,为开发者提供了强大的技术工具链。
技术栈:Java + Selenium + JSoup + HttpClient + 阿里云DashScope