3

我正在创建一个 java 程序,它将从 URL 读取 html 文档并在代码中显示图像的大小。我不确定如何实现这一目标。

我不需要实际下载和保存图像,我只需要它们在网页上出现的大小和顺序。

例如:一个网页有 3 张图片

<img src="dog.jpg" /> //which is 54kb
<img src="cat.jpg" /> //which is 75kb
<img src="horse.jpg"/> //which is 80kb

我需要我的 java 程序的输出来显示

54kb
75kb
80kb

任何想法我应该从哪里开始?

ps 我是一个java新手

4

4 回答 4

3

你应该把你的问题分成3个子问题

  1. 下载HTML 文档
  2. 解析 HTML文档并找到图像
  3. 下载图像确定其大小
于 2013-01-26T21:31:54.680 回答
3

如果您是 Java 新手,您可能希望利用现有库使事情变得更容易一些。 Jsoup允许您使用 CSS 样式的选择器获取 HTML 页面并提取元素。

这只是一个快速且非常肮脏的示例,但我认为它将展示 Jsoup 可以轻松完成这样的任务。请注意,省略了错误处理和响应代码处理,我只是想传递大致的想法:

Document doc = Jsoup.connect("http://stackoverflow.com/questions/14541740/java-program-to-download-images-from-a-website-and-display-the-file-sizes").get();

Elements imgElements = doc.select("img[src]");
Map<String, String> fileSizeMap = new HashMap<String, String>();

for(Element imgElement : imgElements){
    String imgUrlString = imgElement.attr("abs:src");
    URL imgURL = new URL(imgUrlString);
    HttpURLConnection httpConnection = (HttpURLConnection) imgURL.openConnection();
    String contentLengthString = httpConnection.getHeaderField("Content-Length");
    if(contentLengthString == null)
        contentLengthString = "Unknown";

    fileSizeMap.put(imgUrlString, contentLengthString);
}

for(Map.Entry<String, String> mapEntry : fileSizeMap.entrySet()){
    String imgFileName = mapEntry.getKey();
    System.out.println(imgFileName + " ---> " + mapEntry.getValue() + " bytes");
}

您也可以考虑查看Apache HttpClient。我发现它通常比原始的 URLConnection/HttpURLConnection 方法更可取。

于 2013-01-26T22:22:31.010 回答
1

您可以使用正则表达式来查找标签并获取图像 URL。之后,您将需要 HttpUrlConnection 类来获取图像数据并测量其大小。

于 2013-01-26T21:29:30.907 回答
1

你可以这样做:

try {
    URL urlConn = new URL("http://yoururl.com/cat.jpg");
    URLConnection urlC = urlConn.openConnection();
    System.out.println(urlC.getContentLength());
} catch (MalformedURLException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}
于 2013-01-26T21:30:05.443 回答