我实际上正在用Java开发一个文本解析器,有人要求我通过用它解析HTML来增强它。解析器的目的是将被解析的文件分成另外三个文件,一个包含文件中包含的所有单词,一个包括所有句子,另一个包含所有问题。
*.txt部分工作得很好,但我在解析HTML时遇到了一个问题。
我创建了一个扩展名为*.txt的临时文件,并将其在我的文本解析器中传递,但是如果我传递一个带有HTML文件链接的URL,其格式如下所示:
<!DOCTYPE html>
<head>
... some HTML here ...
</head>
<body>
<ul class="some_menu">
<li class="some_menu_item">n1</li>
<li class="some_menu_item">n2</li>
<li class="some_menu_item">n2</li>
</ul>
<div>
This is a question ?
This is a sentence .
... some other text ...
</div>
</body>
</html>
问题文件将填充:n1n2n3这是一个问题
所以,我只是在想,有没有一种方法可以用JSoup逐个标签地进行解析,这样我就可以在每次关闭一个块时添加一个换行符?
如果您需要一些新信息,请不要费心去问!
编辑:我应该有3个输出文件,对于此示例,它们是:
>
一个有所有单词的
n1
n2
n3
This
is
a
question
sentence
... some other words ...
一个包含所有句子
This is a sentence
一个包含所有问题
This is a question
提姆。
市场上有很多HTML解析器,比如
https://en.wikipedia.org/wiki/Comparison_of_HTML_parsers
谢谢,维妮特
要获取 html 正文中的所有文本,您可以使用:
Document doc = Jsoup.connect(url).get();
Elements body = doc.select("body");
String allText = body[0].text();
然后,您可以拆分文本,将每个单词分开。要获取div标签中的文本,可以使用:
Elements div = doc.select("div");
String divText = div[0].text();
然后,您可以拆分divText以获得每个句子。
请注意,选择查询的返回类型实际上是元素列表,即元素。这是因为可以有多个元素匹配您选择的
查询。在这种情况下,由于每种情况下只有一个元素,我们通过访问返回数组的索引0来访问它。
编辑:为了遍历所有元素,请检查这个答案。基本上
Elements elements = doc.body().select("*");
for (Element element : elements) {
System.out.println(element.text());
}
虽然可能有没有文本的元素,所以你可以检查一下。
我试图从这些div标签中获取文本,但是它们都不返回任何内容: HTML: 我想得到div类“消息”和h4标记和跨越“日期时间”中的文本,我试图: 和: 但是他们没有成功。
问题内容: 我想删除标签之间的所有内容。输入示例可能是 输入: 输出将是: 基本上,我必须先删除整个区块 谢谢, 问题答案: 您最好对找到的 所有 元素进行迭代。所以你可以保证 a。)所有元素都被删除并且 b。)如果没有元素,那么什么也做不了。 例: 编辑: (除了我的评论) 当简单的 null /范围检查 在这里足够时,请不要使用异常处理: 代替:
我正在尝试解析
什么是正确的方法来删除只有HTML标签(保留所有自定义/未知的标签)与JSOUP(不是正则表达式)? 预期输入: 预期产出: 我尝试使用白名单清洁剂。none(),但它也会删除自定义标记。 我也尝试过: 但是它也删除了自定义标签。 这个答案对我不好,因为自定义标记的数量是无限的。
这是我的密码 我想替换字体标签,并把span标签。在这将取代第一个字体标签但不是第二个标签
如何从下面的html中解析出46389333? 我使用的是JSoup,显然我可以解析文本、标签和其他值。但是我不知道如何解析这个值。即使我只能解析出/exampleTweet/status/46389333,至少我可以解析这个字符串,这要容易得多。问题是,数字变了,显然例子也变了。不过,地位还是存在的,所以也许我可以利用这一点?任何帮助都是巨大的。