我应该使用什么查询来使用 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="ヽ(ಠ_ಠ)ノ" contenteditable="true">ヽ(ಠ_ಠ)ノ</div>
\(`0´)/
<div id="symbol_9" data-symbols="\(`0´)/" contenteditable="true">\(`0´)/</div>
(╯°□°)╯︵┻━┻
<div id="symbol_10" data-symbols="(╯°□°)╯︵ ┻━┻" contenteditable="true">(╯°□°)╯︵ ┻━┻</div>
所以基本上,符号是 HTML 十六进制代码。
我查看了此处给出的选择器语法 https://jsoup.org/cookbook/extracting-data/selector-syntax
但是,我无法设计一个合适的选择器查询来从 html 页面中提取这些符号。
此外,由于需要从此页面中提取大约 27 个符号。如何将这些符号保存到外部文本文件。
在 @Dave 的帮助下,我能够编写这段代码。但是,这打印了整行代码,我怎样才能使用它 extract
(╯°□°)╯︵┻━┻
来自
<div id="symbol_10" data-symbols="(╯°□°)╯︵ ┻━┻" contenteditable="true">(╯°□°)╯︵ ┻━┻</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);
}
我正在尝试使用 java 的 JSoup 库提取本网站 http://www.i2symbol.com/emoticons/angry 上列出的表情符号。
我在页面的 html-source 中注意到每个表情符号都包含在以下 div id:
以下符号的代码是
ヽ(ಠ_ಠ)ノ<div id="symbol_0" data-symbols="ヽ(ಠ_ಠ)ノ" contenteditable="true">ヽ(ಠ_ಠ)ノ</div>
\(`0´)/
<div id="symbol_9" data-symbols="\(`0´)/" contenteditable="true">\(`0´)/</div>
(╯°□°)╯︵┻━┻
<div id="symbol_10" data-symbols="(╯°□°)╯︵ ┻━┻" contenteditable="true">(╯°□°)╯︵ ┻━┻</div>
所以基本上,符号是 HTML 十六进制代码。 我查看了此处给出的选择器语法 https://jsoup.org/cookbook/extracting-data/selector-syntax 但是,我无法设计一个合适的选择器查询来从 html 页面中提取这些符号。
此外,由于需要从此页面中提取大约 27 个符号。如何将这些符号保存到外部文本文件。
在 @Dave 的帮助下,我能够编写这段代码。但是,这打印了整行代码,我怎样才能使用它 extract
(╯°□°)╯︵┻━┻来自
<div id="symbol_10" data-symbols="(╯°□°)╯︵ ┻━┻" contenteditable="true">(╯°□°)╯︵ ┻━┻</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);
}