代码之家  ›  专栏  ›  技术社区  ›  nick zoum

我如何阅读Java网页的常见内容?

  •  0
  • nick zoum  · 技术社区  · 8 年前

    我想找到一种方法来阅读网页的favicon并将其传递给程序中的图像。到目前为止,我已经创建了这些方法来读取网页,找到favicon行(或第一个.ico文件),然后隔离url。最后,我从该url读取了图像。

    public static Image getFavIcon(String path) {
        try {
            URL url = new URL(path);
            BufferedReader input = new BufferedReader(new InputStreamReader(url.openStream()));
            String temp;
            while ((temp = input.readLine()) != null) {
                if (temp.toLowerCase().contains(("favicon").toLowerCase())) {
                    break;
                }
                if (temp.toLowerCase().contains((".ico").toLowerCase())) {
                    break;
                }
            }
            return getFavIcon(getURL(temp));
        } catch (IOException e) {
            return null;
        }
    }
    
    public static URL getURL(String input) throws MalformedURLException {
        for (int index = 0; index < input.length(); index++) {
            try {
                if (input.substring(index, index + 4).equals("href")) {
                    String temp = getString(input.substring(index));
                    if (temp != null) {
                        return new URL(temp);
                    }
                }
            } catch (StringIndexOutOfBoundsException e) {
    
            }
        }
        return null;
    }
    
    public static String getString(String input) throws StringIndexOutOfBoundsException {
        int first = -1;
        int second = -1;
        int index = 0;
        while ((first == -1) || (second == -1)) {
            if (input.charAt(index) == 34) {
                if (first == -1) {
                    first = index;
                } else {
                    second = index;
                }
            }
            index++;
        }
        String temp = input.substring(first + 1, second);
        int length = temp.length();
        if (temp.substring(length - 4).equals(".ico")) {
            return temp;
        }
        return null;
    }
    
    public static Image getFavIcon(URL url) {
        return java.awt.Toolkit.getDefaultToolkit().createImage(url);
    }
    

    问题是getFavicon返回的图像虽然不为null,但却是空的、不可见的或不透明的。当我尝试打印它时,g.drawImage()或g2.drawImage()为空,但它不会抛出空指针异常

    我试过描述的图书馆 here 但我不知道如何从url中读取图标。 那么,有人知道如何从url中读取图标,或者用更简单的方法将favicon链接到图像吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Nishu Tayal    8 年前

    您可以使用JsonP库来获取favicon。

    比方说,favicon的定义如下:

      <head>
        <link rel="icon" href="http://example.com/image.ico" />
      </head>
    

    您可以使用以下代码:

    Element element = doc.head().select("link[href~=.*\\.(ico|png)]").first();
    System.out.println(element.attr("href"));
    

    这里是 example .