java - 使用 Jsoup 保留行

标签 java html-parsing jsoup

我正在使用 Jsoup 从 html 获取一些数据,我有以下代码:

System.out.println("nie jest");
StringBuffer url=new StringBuffer("http://www.darklyrics.com/lyrics/");
url.append(args[0]);
url.append("/");
url.append(args[1]);
url.append(".html");

//wyciaganie odpowiednich klas z naszego htmla
Document doc=Jsoup.connect(url.toString()).get();
Element lyrics=doc.getElementsByClass("lyrics").first();
Element tracks=doc.getElementsByClass("albumlyrics").first();

//Jso
//lista sciezek
int numberOfTracks=tracks.getElementsByTag("a").size();

一切都会好的,我提取我想要的数据,但是当我这样做时:

lyrics.text()

我得到的文本没有换行符,所以我想知道如何在显示的文本中留下换行符,我在 stackoverflow 上阅读了有关此事的其他线程,但它们没有帮助,我尝试做这样的事情:

TextNode tex=TextNode.createFromEncoded(lyrics.text(), lyrics.baseUri());

但我无法通过换行符获取我想要的文本。我查看了之前关于此问题的帖子, Removing HTML entities while preserving line breaks with JSoup 但我达不到我想要的效果。我该怎么办?

编辑:我得到了我想要的效果,但我认为这不是很好的解决方案:

for (Node nn:listOfNodes)
            {
                String s=Jsoup.parse(nn.toString()).text();
                if ((nn.nodeName()=="#text" || nn.nodeName()=="h3"))
                {
                    buf.append(s+"\n");

                }
            }

有人有更好的主意吗?

最佳答案

您可以通过检查节点是否是 <br /> 的实例来获取文本节点(TextNode 之间的文本)。 。这应该适合您:

Document document = Jsoup.connect(url.toString()).get();
Element lyrics = document.select(".lyrics").first();
StringWriter buffer = new StringWriter();
PrintWriter writer = new PrintWriter(buffer);

for (Node node : lyrics.childNodes()) {
    if (node.nodeName().equals("h3")) {
        writer.println(((Element) node).text());
    } else if (node instanceof TextNode) {
        writer.println(((TextNode) node).text());
    }
}

System.out.println(buffer.toString());

(请注意,比较对象的内部值应该通过 equals() 方法完成,而不是 == ;字符串是对象,而不是基元)

哦,我还建议阅读他们的privacy policy .

关于java - 使用 Jsoup 保留行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8289303/

相关文章:

html - HTML5 标记化有多少种标记类型?

java - 在 Android 中解析一些 HTML 代码的最佳方法

java - 如何确认java BufferedWriter成功写入文本文件

java - 列表的 var 参数作为方法参数

python - 如何使用 python 向网站提供输入

java - Java 中的 HTML 解析?

java - JSoup.connect 抛出 403 错误,而 apache.httpclient 能够获取内容

Java作业(使用for循环填充数组)

java - 如何从列表中删除重复的自定义对象?

python - 使用 BeautifulSoup 遍历 html 树中的元素,并生成一个保持每个元素相对位置的输出?在 Python 中