Википедия соскабливает обычный текст и гиперссылку с помощью jsoup - PullRequest
2 голосов
/ 07 января 2020

У меня есть элемент Wikipedia, который выглядит так, что я хочу очистить с помощью 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>

страница Википедии выглядит следующим образом (жирный текст - гиперссылки):

AAAABBBB CCCC

D DDD EEEEFFFF

GGGG

Я хочу создать такой список: [AAAABBBB CCCC, DDDDEEEEFFFF, GGGGG]

1 Ответ

1 голос
/ 07 января 2020

В этом конкретном случае c вы можете выполнить предварительную обработку на 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);
...