从论坛帖子中解析评论级别

彼得西斯卡弗

是否有可能像下面这样从此网络中找到评论级别?https://www.ozbargain.com.au/node/249439#comment-3719026

从jsoup,我可以解析注释,用户名等,但是我在获取正确的注释级别方面遇到困难。

查看该页面的源代码时,该页面与正确的实时帖子不匹配,除非我读错了所有内容。

有办法解决吗?

我能够使用以下命令生成源评论级别:

        String url = "https://www.ozbargain.com.au/node/249439";
        Document doc = Jsoup.connect(url).get();
        Elements level = doc.select("ul.comment");


         for(Element column : e.select("ul")){
                //comment level
                System.out.println(column.attr("class"));
                levels.add(column.attr("class"));
            }

但它看起来不正确。仅显示0级注释等中的1。

谢谢

史蒂芬(Stephan)
for(Element column : e.select("ul")) {
    //comment level
    System.out.println(column.attr("class"));
    levels.add(column.attr("class"));
}

从上面的代码是e从哪里来的?

无论如何,您需要解析class属性值以找到注释级别。

这是一个有效的示例代码:

样本代码

public static void main(String[] args) throws IOException {
    String url="https://www.ozbargain.com.au/node/249439#comment-3719026";
    Document doc = Jsoup.connect(url).get();
    Elements comments = doc.select("div.comment-wrap");

    Matcher levelMatcher = Pattern.compile("(?i)^(.*level)(\\d+)(.*)$").matcher("");
    List<String> levels = new ArrayList<>();

    System.out.println("Comments found: "+ comments.size());

    for (Element comment : comments) {            
        if (levelMatcher.reset(comment.parent().parent().className()).find()) {
            levels.add(levelMatcher.replaceAll("$2"));
        }
    }

    System.out.println(levels);
}

输出[https://www.ozbargain.com.au/node/249439#comment-3719026] (可能会随请求时间而变化)

Comments found: 38
[0, 1, 2, 3, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 2, 3, 3, 1, 2, 3, 3, 0, 1, 2, 3, 2, 3, 3, 2, 0, 0, 0, 1, 2, 3]

输出[https://www.ozbargain.com.au/node/249604] (可能会根据请求时间而变化)

Comments found: 14
[0, 1, 0, 1, 0, 1, 1, 2, 1, 0, 0, 1, 2, 0]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章