2013-11-21 39 views
0

我正在解析一个网页,我可以解析id但不是类..这就是我的意思;我解析整个消息的包装标识:如何在jsoup解析中选择类

protected String getBlogStats() throws Exception { 
       String result = ""; 
       // get html document structure 
       Document document = Jsoup.connect(BLOG_URL).get(); 
       // selector query 
       Elements nodeBlogStats = document.select("div#news_wrapper"); 
       // check results 
       if(nodeBlogStats.size() > 0) { 
        // get value 
        result = nodeBlogStats.get(0).text(); 
       } 

       // return 
       return result; 
      } 

和它的作品,我可以显示的一切,但我需要选择此包装内只有H3标签,所以我这样tryied:

protected String getBlogStats() throws Exception { 
       String result = ""; 
       // get html document structure 
       Document document = Jsoup.connect(BLOG_URL).get(); 
       // selector query 
       Elements nodeBlogStats = document.select("div#news_wrapper .news-col-1 h3"); 
       // check results 
       if(nodeBlogStats.size() > 0) { 
        // get value 
        result = nodeBlogStats.get(0).text(); 
       } 

       // return 
       return result; 
      } 

news-col-1是一个类..但活动是空白..有没有另一种方法来编写类与jsoup解析?由于

+0

你可以像这样写getElementsByClassName(“yourclassname”) –

+0

你可以分享你正试图解析的url吗? –

+0

http://www.multiplayer.it –

回答

2

一种可能的方式来获得所有的H3标签内该div使用类:

Elements nodeBlogStats = doc.select("div.news-col-0 h3"); 

它不会与.news-col-1工作,因为没有<h3>标签是该分区的直接孩子。当你评论,该ID还将努力:

Elements nodeBlogStats = doc.select("div#news_wrapper h3"); 

你的代码只返回第一H3,而不是全部的原因是因为你设置的结果是只有在nodeBlogStats的第一个元素的文本(当你说get(0)):

if(nodeBlogStats.size() > 0) { 
    // get value 
    result = nodeBlogStats.get(0).text(); 
} 

考虑返回ListnodeBlogStats.text()如果你希望所有的H3文字。


更新:

所以,你可以改变你的方法返回一个ArrayList

protected ArrayList<String> getBlogStats() throws Exception { 
    // get html document structure 
    Document document = Jsoup.connect(BLOG_URL).get(); 
    // selector query 
    Elements nodeBlogStats = document.select("div#news_wrapper"); 
    // check results 
    ArrayList<String> list = new ArrayList<String>(); 
    for (Element e : nodeBlogStats) { 
     list.add(e.text()); 
    } 
    return list; 
} 
+0

现在我尝试..你认为很难创建一个从此代码开始的列表?你能帮我吗?这正是我需要:) –

+0

@David_D看到我更新的答案,希望有所帮助。 – ashatte

+0

mmh这个错误是什么? ''<>'操作符不允许在1.7以下的源代码级别没有看到......它在'new ArrayList <>();' –