2016-04-14 99 views
1

我想提取jsoup中給定元素內的鏈接。在這裏我做了什麼,但它不工作:Java jsoup鏈接提取

Document doc = Jsoup.connect(url).get(); 
     Elements element = doc.select("section.row"); 
     Element s = element.first(); 
     Elements se = s.getElementsByTag("article"); 


      for(Element link : se){ 
       System.out.println("link :" + link.select("href")); 
      } 

下面是HTML: enter image description here

我試圖做的事情是讓所有withing文章類的鏈接。我認爲也許首先我必須選擇section =「row」部分,然後在那之後從文章類中獲取鏈接,但是我無法使其工作。

+0

你會得到什麼結果? – GHajba

+0

上面的代碼給出了任何結果,當我試圖打印元素時,它向我展示了與圖像 – imoteb

回答

1

試試這個。

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

    Elements section = doc.select("#main"); //select section with the id = main 
    Elements allArtTags = section.select("article"); // select all article tags in that section 
    for (Element artTag : allArtTags){ 
     Elements atags = artTag.select("a"); //select all a tags in each article tag 
     for(Element atag : atags){ 
      System.out.println(atag.text()); //print the link text or 
      System.out.println(atag.attr("href"));//print link 
     } 
    } 
+0

一樣的內容,謝謝 – imoteb

+1

您不需要那些嵌套的循環和選擇器。你可以做'元素atags = doc.select(「#main article a」)'。 –

0

我在我的項目之一使用此:

final Elements elements = doc.select("div.item_list_section.item_description"); 

你必須得到你想要從中提取鏈接的元素。

private static ... inspectElement(Element e) { 
     try { 
      final String name = getAttr(e, "a[href]"); 
      final String link = e.select("a").first().attr("href"); 
      //final String price = getAttr(e, "span.item_price"); 
      //final String category = getAttr(e, "span.item_category"); 
      //final String spec = getAttr(e, "span.item_specs"); 
      //final String datetime = e.select("time").attr("datetime"); 

      ... 
     } 
     catch (Exception ex) { return null; } 
} 

private static String getAttr(Element e, String what) { 
    try { 
     return e.select(what).first().text(); 
    } 
    catch (Exception ex) { return ""; } 
}