用 Java 从网站提取图像

如果你是一名网络开发人员、平面设计师、研究人员、记者、学生,或者只是在做一个个人项目,你可能会需要图片,并需要从网站上收集图片的能力。手动保存图片–复制每个 URL 并逐个下载–可能既费时又低效。不过,您可以使用 Aspose.HTML for Java 库 库来自动完成这一过程,并以编程方式从网站上提取图片。

本文将探讨如何使用 Java 以编程方式从网站中提取不同类型的图像。使用 Aspose.HTML for Java,您可以轻松创建一个工具来解析 HTML 页面、识别图片来源并下载这些图片。对于需要收集图像用于分析、存档或内容创建的人来说,这是一个功能强大的解决方案,而且无需手动操作。

从网站提取图片

HTML 文档中的大多数图片都使用 <img> 元素表示。以下代码片段演示了如何使用 Aspose.HTML for Java 查找该元素指定的图片。因此,要从网站下载图片,应采取以下几个步骤:

  1. 使用 HTMLDocument(Url) 构造函数创建一个 HTMLDocument 实例,并传递要处理的网页的 URL。
  2. 调用 getElementsByTagName(“img”) 方法从文档中获取所有 <img> 元素。该方法将返回页面中存在的 <img> 元素的集合。
  3. 遍历 <img> 元素并使用 getAttribute(“src”) 方法获取每张图片的 src 属性值。每个 src 都会被添加到 urls 集合中。
  4. 使用 Url 类和文档的 BaseURI 属性将相对图像路径转换为绝对 URL。
  5. 对于每个绝对图像 URL,使用 RequestMessage(url) 构造函数创建一个请求,并使用 document.getContext().getNetwork().send(request) 发送。这将返回一个 ResponseMessage.
  6. 如果响应显示成功,则使用 response.getContent().readAsByteArray() 提取图像数据,并使用 FileHelper.writeAllBytes() 将其保存到本地文件系统。
 1// Extract images from website using Java
 2
 3// Open a document you want to download images from
 4final HTMLDocument document = new HTMLDocument("https://docs.aspose.com/svg/net/drawing-basics/svg-shapes/");
 5
 6// Collect all <img> elements
 7HTMLCollection images = document.getElementsByTagName("img");
 8
 9// Create a distinct collection of relative image URLs
10Iterator<Element> iterator = images.iterator();
11java.util.Set<String> urls = new HashSet<>();
12for (Element e : images) {
13    urls.add(e.getAttribute("src"));
14}
15
16// Create absolute image URLs
17java.util.List<Url> absUrls = urls.stream()
18        .map(src -> new Url(src, document.getBaseURI()))
19        .collect(Collectors.toList());
20
21// foreach to while statements conversion
22for (Url url : absUrls) {
23    // Create an image request message
24    final RequestMessage request = new RequestMessage(url);
25
26    // Extract image
27    final ResponseMessage response = document.getContext().getNetwork().send(request);
28
29    // Check whether a response is successful
30    if (response.isSuccess()) {
31        String[] split = url.getPathname().split("/");
32        String path = split[split.length - 1];
33
34        // Save file to a local file system
35        FileHelper.writeAllBytes($o(path), response.getContent().readAsByteArray());
36    }
37}

这一简单有效的解决方案可让您自动执行图像提取过程,从而节省宝贵的时间。

注: 在将保存的图片用于商业用途之前,请务必尊重版权法,并确保您已获得必要的许可或授权。未经适当许可,我们不支持提取和使用第三方来源的内容用于商业目的。

从网站提取图标

HTML 文档中的图标通常使用带有 rel="icon" 属性的 <link> 元素来定义。要使用 Aspose.HTML for Java 从网站中提取图标,请按照以下步骤操作:

  1. 使用 HTMLDocument(Url) 构造函数加载网页,传入要分析的网站的 URL。
  2. 使用 getElementsByTagName(“link”) 方法从文档中收集所有 <link> 元素。
  3. 过滤结果,只包括 rel 属性设置为 "icon" 的元素,因为这些元素定义了图标链接。
  4. 在每个过滤后的 <link> 元素上调用 getAttribute(“href”) 提取相对 URL。
  5. 使用 Url 类和 HTMLDocumentgetBaseURI() 方法创建绝对图标 URL。
  6. 使用 RequestMessage 类和 document.getContext().getNetwork().send() 方法为每个图标发送请求。
  7. 检查响应,如果成功,则使用 FileHelper.writeAllBytes()将图标保存到本地。这样,HTML 中引用的所有网站图标都会被下载并保存到本地文件系统中。
 1// Download icons from website using Java
 2
 3// Open a document you want to download icons from
 4final HTMLDocument document = new HTMLDocument("https://docs.aspose.com/html/net/message-handlers/");
 5
 6// Collect all <link> elements
 7HTMLCollection links = document.getElementsByTagName("link");
 8
 9// Leave only "icon" elements
10java.util.Set<Element> icons = new HashSet<>();
11for (Element link : links) {
12    if ("icon".equals(link.getAttribute("rel"))) {
13        icons.add(link);
14    }
15}
16
17// Create a distinct collection of relative icon URLs
18java.util.Set<String> urls = new HashSet<>();
19for (Element icon : icons) {
20    urls.add(icon.getAttribute("href"));
21}
22
23// Create absolute image URLs
24java.util.List<Url> absUrls = urls.stream()
25        .map(src -> new Url(src, document.getBaseURI()))
26        .collect(Collectors.toList());
27
28// foreach to while statements conversion
29for (Url url : absUrls) {
30    // Create a downloading request
31    final RequestMessage request = new RequestMessage(url);
32
33    // Extract icon
34    final ResponseMessage response = document.getContext().getNetwork().send(request);
35
36    // Check whether a response is successful
37    if (response.isSuccess()) {
38        String[] split = url.getPathname().split("/");
39        String path = split[split.length - 1];
40
41        // Save file to a local file system
42        FileHelper.writeAllBytes($o(path), response.getContent().readAsByteArray());
43    }
44}

您可以使用这些 Java 示例自动提取网站中的所有图片,这对于归档、研究、分析网站内容等任务或任何其他个人应用都很有帮助。此外,这也非常适合网页设计师和开发人员在不深入研究源代码的情况下从网站中提取图片。

Aspose.HTML 提供一套免费的在线 HTML 网络应用程序,包括转换器、合并器、搜索引擎优化工具、HTML 代码生成器、URL 工具等。这些基于浏览器的工具可在任何操作系统上使用,无需额外安装软件。无论你是需要转换或合并文件、提取网页数据、生成 HTML 代码,还是分析网页以进行搜索引擎优化,你都可以在网上完成。利用我们易于使用的 HTML 网络应用程序,随时随地简化您的日常任务,提高您的工作效率。

文本 “HTML 网络应用程序”

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.