【问题标题】:How select classes in jsoup parsingjsoup解析中如何选择类
【发布时间】:2013-12-05 15:15:08
【问题描述】:

我正在解析一个网页,我可以解析 id 但不能解析类。这就是我的意思;我正在解析整个新闻包装器 ID:

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 标签,所以我尝试了这种方式:

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 进行解析?谢谢

【问题讨论】:

  • 你可以这样写 getElementsByClassName("yourclassname")
  • 您能分享一下您要解析的网址吗?
  • @NitinMisra 你能告诉我如何处理你的建议吗?我分享了网址
  • 如果我写:Elements nodeBlogStats = document.select("div#news_wrapper h3"); 它只显示第一个而不是所有h3 标签

标签: java android class html-parsing jsoup


【解决方案1】:

使用类获取该 div 中所有 h3 标签的一种可能方法是:

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

它不适用于.news-col-1,因为<h3> 标记都不是该div 的直接子级。正如您评论的那样,该 id 也可以使用:

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

您的代码仅返回第一个 h3 而不是全部的原因是因为您将 result 设置为仅是 nodeBlogStats 中第一个元素的文本(当您说 get(0) 时):

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

如果您想要所有 h3 文本,请考虑返回 ListnodeBlogStats.text()


更新:

所以你可以改变你的方法来返回一个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;
}

【讨论】:

  • 现在我尝试.. 你认为从这段代码开始创建一个列表很难吗?你能帮我吗?这正是我需要的:)
  • mmh 这是什么错误? '&lt;&gt;' operator is not allowed for source level below 1.7 从未见过.. 在new ArrayList&lt;&gt;();
  • 我想我必须在我的 main.xml 中创建一个列表视图,对吧?
  • @David_D 将其更改为ArrayList&lt;String&gt; list = new ArrayList&lt;String&gt;();,这取决于您希望如何显示数据以及是否需要列表视图。我的代码只是向您展示了如何以 ArrayList 格式检索文本。
  • 最好有一个列表视图来显示该数据。你有时间帮助我吗?
猜你喜欢
  • 2014-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多