jSoup清理网页但保留图像和换行符

时间:2016-02-27 07:35:03

标签: android jsoup

我正在尝试使用jSoup来允许Android WebView内的网页阅读器模式。

 Document doc = Jsoup.parse(url,3000);
 String justTheText = doc.text();

将此应用于CNN例如打印出每个菜单等等,因此并不是读者友好的。我想保留标题和文字,而不是摆脱图像。我需要以有序的方式呈现页面。

我需要的是保留图像,但丢弃无关的内容,并在文本中保留换行符。这必须是一般的,所以它适用于不同的页面。

如果我无法保留图像,并且必须将页面显示为纯文本,至少我需要一种方法来保留标题和换行符。而不是引入无关的文本和链接等。

1 个答案:

答案 0 :(得分:1)

这确实不是一项微不足道的任务,虽然它绝对可行(iOS的阅读模式做得非常好)。

您需要先找到一种方法来了解要过滤的元素,例如省略菜单。您可以通过查看标记名称和/或类名称并省略特定标记/类来尝试执行此操作。 接下来,您要处理您想要包含的项目:获取包含文本的所有时间(并且可能在每行之后添加<br/>),包括图像等。

这是让你入门的东西(需要Java 8):

        doc.body().getAllElements().stream()
            .filter(elem -> !elem.className().toLowerCase().matches(".*(menu|header|footer|logo|nav|search|link|button|btn|ad).*"))
            .forEach(elem -> {
                if (elem.hasText()) {
                    result.append(elem.text() + "<br/>");
                }
                if (elem.tagName().equals("img")) {
                    result.append(elem.toString());
                }
        });