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

时间:2016-05-24 12:20:26

标签: java android html jsoup

是否可以从此网站中找到评论级别,如下所示? 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等。

由于

1 个答案:

答案 0 :(得分:1)

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

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

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

这是一个工作示例代码:

示例代码

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);
}

OUTPUT [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]

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

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