簡體   English   中英

使用JSoup解析href值的鏈接僅適用於單個鏈接,但不適用於一系列鏈接

[英]Parsing links for href value using JSoup works for a single link, but not for an array of links

我已經成功地使用JSoup來獲取href鏈接。 我還設法獲取了單個鏈接的href的相對值和絕對值。 如下所示:

//works perfectly, website: bbc.co.uk
Document document = Jsoup.connect(url).get();
Element link = document.select("a").last();
String relHref = testlink.attr("href");
String absHref = testlink.attr("abs:href");
System.out.println(relHref);   
System.out.println(absHref);

 //output: 
relHref: /help/web/links/
absHref: http://www.bbc.co.uk/help/web/links/

我什至可以使用Element link = document.select("a").first(); 這也有效。 但是,當我嘗試將其添加到循環中以迭代所有抓取的鏈接並打印出每個鏈接時,它並沒有給我預期的結果。 這是我的代碼:

 //not working
 Elements links = document.select("a");
 for(int i=0; i<links.size(); i++){
        String relHref = links.attr("href");
        String absHref = links.attr("abs:href");
        System.out.println(relHref);
        System.out.println(absHref);
    }
//output 
http://m.bbc.co.uk
http://m.bbc.co.uk
http://m.bbc.co.uk
....

我知道類型為Elements的links數組具有正確的數據,如果我嘗試在links數組中打印元素,它將顯示所有href標簽,即

for (Element link : links) {
        System.out.println(link);
    }
//output 116 links:

<a href="http://m.bbc.co.uk">mobile site</a>
<a href="/"> <img src="http://static.bbci.co.uk/frameworks/barlesque/2.72.5/orb/4/img/bbc-blocks-dark.png" width="84" height="24" alt="BBC"> </a>
<a href="#h4discoveryzone">Skip to content</a>
<a id="orb-accessibility-help" href="/accessibility/">Accessibility Help</a>
....

但是,如何獲取relHref和absHref來使數組工作? 相反,我的代碼只是一遍又一遍地打印出第一個鏈接。 我已經花了幾個小時了,所以我可能在某個地方犯了一個愚蠢的錯誤,但是很感謝您的幫助!

謝謝。

在這行上:

String relHref = links.attr("href");

...應該如何知道您在談論第i個鏈接? (它不是: Elements#attr總是返回Elements集合中第一個條目的值。)

你要

String relHref = links.get(i).attr("href");

...這將通過Elements#get您感興趣的特定鏈接,然后在其上使用Node#attr

就是說,盡管如此,我只會使用增強的for循環:

for (Element link : document.select("a")) {
    String relHref = link.attr("href");
    String absHref = link.attr("abs:href");
    System.out.println(relHref);
    System.out.println(absHref);
}

...除非您需要i幫忙。

您需要在for循環中使用Elements方法, get(int index)來獲取由Elements持有的每個Element。

例如,

Elements links = document.select("a");
for(int i=0; i < links.size(); i++) {
    Element ele = links.get(i);

    /// use ele here to extract info from each Element

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM