维基百科使用 jsoup 抓取纯文本和超链接
wikipedia scraping plain text and hyperlink with jsoup
我有一个看起来像这样的维基百科元素,我想用 Jsoup 抓取它。我想将元素放入一个字符串列表中,并在
有意义的情况下将它们分开。现在,我在 的所有子项中循环元素,这会遗漏像 CCCC 和 GGGG 这样的纯文本。有什么方法可以捕获纯文本和超链接文本吗?
<td class="" style="" itemprop="">
<a href="/wiki/%E5%9C%8B%E5%AD%B8%E9%99%A2%E5%A4%A7%E5%AD%B8" title="AAAA">AAAA</a>
<a href="/wiki/%E6%96%87%E5%AD%A6%E9%83%A8" title="BBBB">BBBB</a>
"CCCC"
<br>
"DDDD"
<a href="/wiki/%E5%A4%A7%E5%AD%A6%E9%99%A2" title="EEEE">EEEE</a>
<a href="/wiki/%E6%96%87%E5%AD%A6%E7%A0%94%E7%A9%B6%E7%A7%91" title="FFFF">FFFF</a>
<br>
GGGG
</td>
维基百科页面如下所示(粗体为超链接文本):
AAAABBBBCCCC
DDDDEEEEFFFF
GGGG
我想创建一个这样的列表:
[AAAABBBBCCCC, DDDDEEEEFFFF, GGGGG]
在这种特定情况下,您可以对 html 进行预处理,以便让 Jsoup 更轻松。试试这个代码:
String html = "<table><td class=\"\" style=\"\" itemprop=\"\">\n" +
"<a href=\"/wiki/%E5%9C%8B%E5%AD%B8%E9%99%A2%E5%A4%A7%E5%AD%B8\" title=\"AAAA\">AAAA</a> \n" +
"<a href=\"/wiki/%E6%96%87%E5%AD%A6%E9%83%A8\" title=\"BBBB\">BBBB</a>\n" +
"\"CCCC\"\n" +
"<br>\n" +
"\"DDDD\"\n" +
"<a href=\"/wiki/%E5%A4%A7%E5%AD%A6%E9%99%A2\" title=\"EEEE\">EEEE</a>\n" +
"<a href=\"/wiki/%E6%96%87%E5%AD%A6%E7%A0%94%E7%A9%B6%E7%A7%91\" title=\"FFFF\">FFFF</a> \n" +
"<br>\n" +
"GGGG\n" +
"</td></table>";
html = html.replace("<br>", "</td><td>");
Document doc = Jsoup.parse(html);
List<String> result = doc.select("td").eachText()
.stream()
.map(r -> r.replace("\"", ""))
.map(r -> r.replace(" ", ""))
.collect(Collectors.toList());
System.out.println(result);
我有一个看起来像这样的维基百科元素,我想用 Jsoup 抓取它。我想将元素放入一个字符串列表中,并在
有意义的情况下将它们分开。现在,我在 的所有子项中循环元素,这会遗漏像 CCCC 和 GGGG 这样的纯文本。有什么方法可以捕获纯文本和超链接文本吗?
<td class="" style="" itemprop="">
<a href="/wiki/%E5%9C%8B%E5%AD%B8%E9%99%A2%E5%A4%A7%E5%AD%B8" title="AAAA">AAAA</a>
<a href="/wiki/%E6%96%87%E5%AD%A6%E9%83%A8" title="BBBB">BBBB</a>
"CCCC"
<br>
"DDDD"
<a href="/wiki/%E5%A4%A7%E5%AD%A6%E9%99%A2" title="EEEE">EEEE</a>
<a href="/wiki/%E6%96%87%E5%AD%A6%E7%A0%94%E7%A9%B6%E7%A7%91" title="FFFF">FFFF</a>
<br>
GGGG
</td>
维基百科页面如下所示(粗体为超链接文本):
AAAABBBBCCCC
DDDDEEEEFFFF
GGGG
我想创建一个这样的列表: [AAAABBBBCCCC, DDDDEEEEFFFF, GGGGG]
在这种特定情况下,您可以对 html 进行预处理,以便让 Jsoup 更轻松。试试这个代码:
String html = "<table><td class=\"\" style=\"\" itemprop=\"\">\n" +
"<a href=\"/wiki/%E5%9C%8B%E5%AD%B8%E9%99%A2%E5%A4%A7%E5%AD%B8\" title=\"AAAA\">AAAA</a> \n" +
"<a href=\"/wiki/%E6%96%87%E5%AD%A6%E9%83%A8\" title=\"BBBB\">BBBB</a>\n" +
"\"CCCC\"\n" +
"<br>\n" +
"\"DDDD\"\n" +
"<a href=\"/wiki/%E5%A4%A7%E5%AD%A6%E9%99%A2\" title=\"EEEE\">EEEE</a>\n" +
"<a href=\"/wiki/%E6%96%87%E5%AD%A6%E7%A0%94%E7%A9%B6%E7%A7%91\" title=\"FFFF\">FFFF</a> \n" +
"<br>\n" +
"GGGG\n" +
"</td></table>";
html = html.replace("<br>", "</td><td>");
Document doc = Jsoup.parse(html);
List<String> result = doc.select("td").eachText()
.stream()
.map(r -> r.replace("\"", ""))
.map(r -> r.replace(" ", ""))
.collect(Collectors.toList());
System.out.println(result);