我应该使用什么查询来使用 Jsoup 从 html 页面中提取符号?

What queries should I use for extracting symbols from a html page using Jsoup?

我正在尝试使用 java 的 JSoup 库提取本网站 http://www.i2symbol.com/emoticons/angry 上列出的表情符号。

我在页面的 html-source 中注意到每个表情符号都包含在以下 div id:

以下符号的代码是

ヽ(ಠ_ಠ)ノ
<div id="symbol_0" data-symbols="&#x30FD;(&#x0CA0;_&#x0CA0;)&#x30CE;" contenteditable="true">&#x30FD;(&#x0CA0;_&#x0CA0;)&#x30CE;</div>
\(`0´)/
<div id="symbol_9" data-symbols="&#65340;&#40;&#65344;&#48;&#180;&#41;&#65295;" contenteditable="true">&#65340;&#40;&#65344;&#48;&#180;&#41;&#65295;</div>
(╯°□°)╯︵┻━┻
<div id="symbol_10" data-symbols="&#40;&#9583;&#176;&#9633;&#176;&#65289;&#9583;&#65077;&#32;&#9531;&#9473;&#9531;" contenteditable="true">&#40;&#9583;&#176;&#9633;&#176;&#65289;&#9583;&#65077;&#32;&#9531;&#9473;&#9531;</div>

所以基本上,符号是 HTML 十六进制代码。 我查看了此处给出的选择器语法 https://jsoup.org/cookbook/extracting-data/selector-syntax 但是,我无法设计一个合适的选择器查询来从 html 页面中提取这些符号。

此外,由于需要从此页面中提取大约 27 个符号。如何将这些符号保存到外部文本文件。

@Dave 的帮助下,我能够编写这段代码。但是,这打印了整行代码,我怎样才能使用它 extract

(╯°□°)╯︵┻━┻

来自

<div id="symbol_10" data-symbols="&#40;&#9583;&#176;&#9633;&#176;&#65289;&#9583;&#65077;&#32;&#9531;&#9473;&#9531;" contenteditable="true">&#40;&#9583;&#176;&#9633;&#176;&#65289;&#9583;&#65077;&#32;&#9531;&#9473;&#9531;</div>

我的Java代码

import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class HTMLParserExample3 {

  public static void main(String[] args) {

    Document doc;
    try {
        doc = Jsoup.connect("http://www.i2symbol.com/emoticons/angry").get();

        Elements symbols= doc.select("div[^data-symbols]");
        for(Element symbol : symbols) {
            System.out.println("\nSymbol: " + symbol);
        }



    } catch (IOException e) {
        e.printStackTrace();
    }

  }

}

看起来它们都使用 HTML5 数据属性(例如 "data-symbols"),根据选择器文档,您可以使用以下内容按数据属性过滤元素:

[^attr]:带有属性名称前缀的元素,例如[^data-] 查找具有 HTML5 数据集属性

的元素

考虑到这一点,试一试:

Elements symbols= doc.select("div[^data-symbols]");

至于将其写入文件,如果您希望该文件成为 HTML 您可以尝试 this.

更新:

JSoup 有一种方法可以完成您想要列出的事情 here

如果我们将其应用于您的案例并将其添加到我们之前的案例中,那么我们将得到:

Elements symbols= doc.select("div[^data-symbols]");
for (Element s: symbols) {
   String symbol= s.attr("data-symbols");
   System.out.println(symbol);
}