Какие запросы я должен использовать для извлечения символов из HTML-страницы с помощью Jsoup?

Я пытаюсь извлечь смайлики, перечисленные на этом сайте http://www.i2symbol.com/emoticons/angry с помощью библиотеки JSoup для Java.

В html-источнике страницы я заметил, что каждый смайлик содержится в следующем идентификаторе div:

Код для следующего символа

ヽ(ಠ_ಠ)ノ
<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 HEX-кодами. Я посмотрел на синтаксис селектора, приведенный здесь https://jsoup.org/cookbook/extracting-data/selector-syntax Но я не могу создать соответствующий запрос селектора для извлечения этих символов из HTML-страницы.

А также, поскольку существует около 27 символов, которые необходимо извлечь с этой страницы. Как сохранить эти символы во внешний текстовый файл.

С помощью @Dave я смог написать этот код. Но это печатает всю строку кода, как я могу просто использовать его извлечь

(╯°□°)╯︵ ┻━┻

от

<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();
    }

  }

}

1 ответ

Решение

Похоже, что все они используют атрибут данных HTML5 (например, "data-символы"), и в соответствии с документами селектора вы можете использовать следующее для фильтрации элементов по атрибуту данных:

[^ attr]: элементы с префиксом имени атрибута, например, [^data-] находит элементы с атрибутами набора данных HTML5

Имея это в виду, дать этому шанс:

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

Что касается записи в файл, если вы хотите, чтобы этот файл был HTML, вы можете попробовать что-то вроде этого.

Обновить:

У JSoup есть способ сделать то, что вы хотите, перечисленные здесь.

Если мы применим это к вашему делу, мы добавим его к тому, что у нас было ранее, то получим:

Elements symbols= doc.select("div[^data-symbols]");
for (Element s: symbols) {
   String symbol= s.attr("data-symbols");
   System.out.println(symbol);
}
Другие вопросы по тегам