5

嗨,我对 Java 比较陌生,但我希望编写一个类,该类将使用 JSOUP 在 HTML 文件中找到所有 ALT(图像)属性。如果图像上没有替代文本并且是否有提醒用户检查它,我希望打印一条错误消息。

import java.io.File;
import org.jsoup.Jsoup;
import org.jsoup.parser.Parser;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.TextNode;
import org.jsoup.select.Elements;


public class grabImages {
                File input = new File("...HTML");
                Document doc = Jsoup.parse(input, "UTF-8", "file:///C:...HTML");

                Elements img = doc.getElementsByTag("img"); 
                Elements alttext = doc.getElementsByAttribute("alt");

                 for (Element el : img){
                     if(el.attr("img").contains("alt")){
                         System.out.println("is the alt text relevant to the image? ");
                         }

                         else { System.out.println("no alt text found on image");
                         }
                    }

}       
4

3 回答 3

6

我觉得你的逻辑有点不对劲。

例如:在这里你试图加载'img'标签的'img'属性......

el.attr("img") 

这是我对该程序的实现。您应该能够根据自己的需要对其进行更改。

 public class Controller {

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

            // Connect to website. This can be replaced with your file loading implementation
            Document doc = Jsoup.connect("http://www.google.co.uk").get();

            // Get all img tags
            Elements img = doc.getElementsByTag("img");

            int counter = 0;

            // Loop through img tags
            for (Element el : img) {
                // If alt is empty or null, add one to counter
                if(el.attr("alt") == null || el.attr("alt").equals("")) {
                    counter++;
                }
                System.out.println("image tag: " + el.attr("src") + " Alt: " + el.attr("alt"));
            }
            System.out.println("Number of unset alt: " + counter);

        }

    }
于 2013-09-05T11:35:58.497 回答
2
public class grabImages {
      public static void main(String[] args) {
         Document doc;
     try {
         doc = Jsoup.connect("...HTML").get();
         Elements img = doc.getElementsByTag("img"); 

          for (Element el : img){
                                if(el.hasAttr("alt")){
                                    System.out.println("is the alt text relevant to the image? ");
                                }
                                else { 
                                    System.out.println("no alt text found on image");
                                }
                               }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
               }
}

el.hasAttr("alt")将给出 'alt' attr 是否存在。

更多信息 http://jsoup.org/cookbook/extracting-data/example-list-links

于 2013-09-10T11:11:31.720 回答
0

您可以通过使用CSS 选择器选择img没有的 来简化这一点alt,而不是遍历img文档中的每个。

    Document doc = Jsoup.connect(url).get();

    for (Element img : doc.select("img:not([alt])"))
        System.out.println("img does not have alt: " + img);
于 2016-08-01T13:06:12.523 回答