2015-10-15 63 views
3

我尽量尝试根据给定扫描的网站链接给定的格式Jsoup的Java

这是我发言的选择level.I've扫描所有链接在网页中,我已阅读选择一定的方式固定,我想读它在循环较多,递归或任何事情来帮助我成为电平选择更灵活的命令我将来可能会大于2

public static void main(String[] args) { 
     String website = website("http://www.java2s.com/"); 
     System.out.println(website); 
    } 

    private static String website(String url) { 
     String lstLink = ""; 
     try { 
      String level[] = {"div.col-md-9 li a", "div#sidebar ul li a"}; 
      //Level 1 
      Document connect = Jsoup.connect(url).get(); 
      Elements selectLevel1 = connect.select(level[0]); 
      for (Element level1 : selectLevel1) { 
       lstLink += level1.attr("href") + "\n"; 

       //Level2 
       Document connect2 = Jsoup.connect(level1.attr("href")).get(); 
       Elements selectLevel2 = connect2.select(level[1]); 
       for (Element level2 : selectLevel2) { 
        lstLink += level2.attr("href") + "\n"; 
       } 
      } 
     } catch (IOException ex) { 
      Logger.getLogger(AWebsite.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     return lstLink; 

    } 

回答

4

请检查一下。

static String levels[] = {"div.col-md-9 li a", "div#sidebar ul li a"}; 

    private static String getRecursive(String href, int level) { 

     String links = ""; 

     if (level > levels.length-1) { 
      return ""; 
     } 

     Document doc; 
     try { 
      doc = Jsoup.connect(href).get(); 
      Elements elements = doc.select(levels[level]); 

      level++; 

      for (Element element : elements) { 
       if(!element.attr("href").isEmpty()) 
       { 
        links += element.attr("abs:href") + "\n"; 
        links += getRecursive(element.attr("abs:href"), level); 
       } 
      } 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 
     return links; 
    } 



public static void main(String[] args) { 
    String website = getRecursive("http://www.java2s.com/", 0); 
    System.out.println(website); 
} 
+0

太谢谢了,它不仅解决了选择读取每个级别的问题,而且还取出了页面的完全绝对路径。 当我追加路径时,我不得不非常努力地思考,因为我得到的路径是相对的 –

+1

不客气,很高兴它解决了 – Hasanaga