【问题标题】:Am I only checking for links of a URL with this java code?我是否只使用此 java 代码检查 URL 的链接?
【发布时间】:2013-04-13 19:40:33
【问题描述】:

我有一个方法可以接收 URL 并找到该页面上的所有链接。 但是,我担心它是否只获取链接,因为当我检查链接是否正常工作时,有些链接看起来很奇怪。 例如,如果我检查 www.google.com 上的链接,我会得到 6 个断开的链接,它们不返回 http 状态代码,而是说那个断开的链接没有“协议”。 我只是不会想象谷歌会在其主页上有任何损坏的链接。 断开链接之一的示例是:/preferences?hl=en 我在谷歌主页上看不到这个链接的位置。 我很好奇我是否只检查链接,或者我是否有可能提取不应该是链接的代码?

这是检查链接 URL 的方法:

public static List getLinks(String uriStr) {

    List result = new ArrayList<String>();
    //create a reader on the html content
    try{
        System.out.println("in the getlinks try");
    URL url = new URI(uriStr).toURL();
    URLConnection conn = url.openConnection();
    Reader rd = new InputStreamReader(conn.getInputStream());

    // Parse the HTML
    EditorKit kit = new HTMLEditorKit();
    HTMLDocument doc = (HTMLDocument)kit.createDefaultDocument();
    kit.read(rd, doc, 0);

    // Find all the A elements in the HTML document
    HTMLDocument.Iterator it = doc.getIterator(HTML.Tag.A);
    while (it.isValid()) {
        SimpleAttributeSet s = (SimpleAttributeSet)it.getAttributes();

        String link = (String)s.getAttribute(HTML.Attribute.HREF);
        if (link != null) {
                // Add the link to the result list
                System.out.println(link);
            //System.out.println("link print finished");
            result.add(link);
        }
        //System.out.println(link);
        it.next();
    }
    }

【问题讨论】:

    标签: java url hyperlink


    【解决方案1】:

    您返回的链接没有任何问题。

    查看您的代码,您正在提取 href 属性,在您的示例中,该属性来自元素:

    <a  class=gbmt href="/preferences?hl=en">Search settings</a>
    

    (点击右下角的“设置”可以看到这个链接,会弹出一个包含多个链接的列表)

    如您所见,href 属性仅包含/preferences?hl=en,这只是使其成为相对链接。完整的 url 将是您当前所在页面的地址 + href。在这种情况下:

    http://www.google.com/preferences?hl=en
    

    如果 url 是相对的,您只需要调整代码以添加方法的参数。

    【讨论】:

    • 谢谢,我知道你的意思,我只是不知道如何编码。 if(link != uriStr + href) 将 url 添加到链接的前面。像那样的东西?
    • 我会这样做:if(!"http".regionMatches(true, 0, link, 0, 4)){ link = uriStr + link; }。这样您就不必担心区分大小写的链接或少于 4 个字符的 href。不需要抱歉。很高兴帮助:)
    • 所以它正在工作,但我输入的网址遇到了障碍。这是错误消息:LinkChecker.getLinks(LinkChecker.java:129) 处的 java.lang.String.regionMatches(String.java:1196) 处的线程“主”java.lang.NullPointerException 异常。 java:43)
    • 好吧,如果linknull,就会发生这种情况。您可以随时将条件更改为if(link != null &amp;&amp; !"http".regionMatches(true, 0, link, 0, 4)) ...
    • 啊,好的,链接为空。谢谢,我不明白这个问题。
    猜你喜欢
    • 2011-08-22
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    相关资源
    最近更新 更多