【问题标题】:HTML DOM to Download Image from <img> URIHTML DOM 从 <img> URI 下载图像
【发布时间】:2017-12-29 19:38:07
【问题描述】:

我已经创建了一个列表,其中列出了我想从中下载图像的所有页面 uri,以用于车辆维修手册。

图像是通过 PHP 脚本传递的,可以在这里看到 http://www.atfinley.com/service/index.php?cat=g2&page=32

这可能是为了阻止像我这样的行为,但是,每个讴歌传奇车主都不应该依赖一个主机来获取他们的车辆手册。

我想用 JS/Java 设计一个机器人,它可以访问我存储在这个 txt 文档 https://pastebin.com/yXdMJipq 中的每个 url

自动下载资源中可用的 png。

我最终会创建一份手册的 pdf 文件,并将其发布以供开放和免费使用。

如果有人对我可以使用的库有任何想法,或者有深入研究解决方案的方法,请告诉我。我的 Java 最流利。

我在想一个解决方案可能是在每个 url 获取 html 文档,然后从 &lt;img src&gt;argument 下载图像。

【问题讨论】:

  • 那么您到底面临什么问题?
  • 有一个print/save-按钮。您应该从那里获得 imgs 的链接
  • 你可以使用html解析器

标签: javascript java php html dom


【解决方案1】:

我写过类似的东西,但不幸的是,我再也找不到了。不过,我记得我使用了非常方便的JSoup Java 库。

它包括一个 HTTP 客户端,您可以像使用 jQuery 一样在文档上运行 CSS 选择器...

这是他们首页的示例:

Document doc = Jsoup.connect("http://en.wikipedia.org/").get();
Elements newsHeadlines = doc.select("#mp-itn b a");

创建 PDF 相当棘手,但我使用 Apache PDFBox 来处理这些事情...

【讨论】:

  • 对我非常有用,非常感谢,能够在 Inspector 中找到 CSS Selector。从字面上看,是一种复制粘贴解决方案,用于从文档中解析 html。
【解决方案2】:

我知道您要求使用 JavaScript 解决方案,但我相信 PHP(您也将其添加为标签)更适合该任务。以下是一些帮助您入门的指南:

  1. 将所有 URL 移动到一个数组中,并创建一个将对其进行迭代的 foreach 循环。
  2. 在循环内部,使用PHP Simple HTML DOM Parser 检索每个页面的图像 URL 属性。
  3. 仍在循环内部,使用 CURL 请求中的图像 URL 从中获取文件并将其保存到您的自定义文件夹中。您可以找到这部分所需的代码here

如果这个过程被证明太长并且您遇到 PHP 运行时错误,请考虑将第 2 步生成的 URL 存储在一个文件中,然后使用该文件生成一个新数组并在其上作为单独的进程运行第 3 步。

【讨论】:

  • 感谢您的回复,我对Java比较熟悉,并且我的机器上没有配置PHP。但是我确实喜欢研究您的解决方案,它的开销很小。
【解决方案3】:

抓取图片url的解决方案;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Scanner;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class Acura {

public static void main(String[] args) throws IOException {

    Scanner read;
    Writer write;
    try {
        File list = new File("F:/result.txt");
        read = new Scanner(list);
        write = new FileWriter("F:/imgurls.txt");
        double s = 0;

        while(read.hasNextLine())
            try {
                s++;
                String url = read.nextLine();
                Document doc = Jsoup.connect(url).get();
                Element img = doc.select("img").first();
                String imgUrl = img.absUrl("src");
                write.write(imgUrl + "\n");
                System.out.println((double)(s/2690) + "%");
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        read.close();
        write.close();
    } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    }
}

在文本文档中生成一个漂亮的长图片 url 列表。 本来可以以非顺序的方式完成的,但是当我这样做时,我陶醉了。不过,我确实添加了一个进度条让我自己安心:)

【讨论】:

    【解决方案4】:
    Scanner read;
        Writer write;
        try {
            File list = new File("F:/imgurls.txt");
            read = new Scanner(list);
            double s = 0;
    
            while(read.hasNextLine())
                try {
                    s++;
                    String url = read.nextLine();
                    Response imageResponse = Jsoup.connect(url).ignoreContentType(true).execute();
                    FileOutputStream writer = new FileOutputStream(new java.io.File("F:/Acura/" + (int) s + ".png"));
                    writer.write(imageResponse.bodyAsBytes());
                    writer.close();
                    System.out.println((double)(s/2690) + "%");
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            read.close();
        } catch (FileNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        }
    

    用于生成 pngs

    【讨论】:

      猜你喜欢
      • 2018-11-05
      • 1970-01-01
      • 1970-01-01
      • 2017-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-01
      相关资源
      最近更新 更多