1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/xiaohuo-JsoupXpath

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README_EN.md

JsoupXpath

Build Status

GitHub release

Maven

License

JsoupXPath — это анализатор HTML, основанный на Jsoup и Antlr4. Возможно, это лучший вариант на Java, просто попробуйте его.

Введение

JsoupXpath — это парсер, полностью разработанный на Java с использованием Xpath для анализа и извлечения данных HTML. Он полностью реализует синтаксис стандарта W3C XPATH 1.0 для парсинга HTML. Лексер и парсер Xpath построены на основе Antlr4, а генерация DOM-дерева HTML использует Jsoup, поэтому он называется JsoupXpath. JsoupXpath был разработан в условиях, когда мы не смогли найти достаточно хороший парсер Xpath, но также хотели воспользоваться мощными возможностями и удобством использования Xpath в Java. Логика реализации JsoupXpath ясна и легко расширяема, она поддерживает полный синтаксис стандарта W3C XPATH 1.0. W3C спецификации: http://www.w3.org/TR/1999/REC-xpath-19991116, Синтаксический файл описания JsoupXpath: Xpath.g4

Журнал изменений

https://github.com/zhegexiaohuozi/JsoupXpath/releases

Дискуссионное сообщество

Любые вопросы или предложения можно обсудить, отправив электронное письмо по следующему списку рассылки. Перед первым выступлением необходимо подписаться и дождаться одобрения. (в основном используется для блокировки рекламы и т. д.)

— Подписка: пожалуйста, напишите на seimicrawler+subscribe@googlegroups.com — Выступление: пожалуйста, отправьте письмо на seimicrawler@googlegroups.com — Отписка: пожалуйста, напишите на seimicrawler+unsubscribe@googlegroups.com

Быстрый старт

Зависимости Maven, пожалуйста, обратитесь к информации о выпуске или центральному репозиторию Maven для полной версии:

<dependency>
   <groupId>cn.wanghaomiao</groupId>
   <artifactId>JsoupXpath</artifactId>
   <version>${latest-version-in-maven}</version>
</dependency>

Пример:

String html = "<html><body><script>console.log('aaaaa')</script><div class='test'>some body</div><div class='xiao'>Two</div></body></html>";
JXDocument underTest = JXDocument.create(html);
String xpath = "//div[contains(@class,'xiao')]/text()";
JXNode node = underTest.selNOne(xpath);
Assert.assertEquals("Two",node.asString());

Другие могут обратиться к org.seimicrawler.xpath.JXDocumentTest (https://github.com/zhegexiaohuozi/JsoupXpath/blob/master/src/test/java/org/seimicrawler/xpath/JXDocumentTest.java), здесь есть много тестовых случаев.

Или более типичный пример в Issue.

Синтаксис

Поддерживает полный стандартный синтаксис W3C XPATH 1.0. Спецификации W3C: http://www.w3.org/TR/1999/REC-xpath-19991116

Дерево синтаксиса

  • //ul[@class='subject-list']/li[./div/div/span[@class='pl']/num()>(1000+90*(2*50))][last()][1]/div/h2/allText()

  • //ul[@class='subject-list']/li[not(contains(self::li/div/div/span[@class='pl']//text(),'14582'))]/div/h2//text()

Некоторые замечания об использовании Xpath

В большинстве случаев не рекомендуется напрямую вставлять Xpath, сгенерированный в Firefox или Chrome. Эти браузеры всегда автоматически дополняют некоторые теги в соответствии со стандартом при рендеринге страницы. Например, тег таблицы автоматически добавляется тегом tbody, очевидно, что сгенерированный путь Xpath не является наиболее универсальным, и поэтому значение, скорее всего, не может быть взято. Поэтому, чтобы использовать Xpath и почувствовать удобство и элегантность, которые он приносит, лучше всего изучить стандарт. Синтаксис Xpath, чтобы вы могли легко решать все виды проблем и наслаждаться истинной мощью Xpath!

Функции

  • int position() возвращает позицию текущего узла в контексте.

  • int last() возвращает последнюю позицию узла контекста.

  • int first() возвращает первую позицию узла контекста.

  • string concat(string, string, string*) объединяет несколько строк.

  • boolean contains(string, string) определяет, содержит ли первая строка вторую.

  • int count(node-set) подсчитывает количество узлов в заданном наборе узлов.

  • double/long sum(node-set) функция суммы возвращает сумму для каждого узла в аргументе node-set результата преобразования строковых значений узла в число.

  • boolean starts-with(string, string) определяет, начинается ли первая строка со второй.

  • int string-length(string?) возвращает длину строки, если дана строка, иначе преобразует текущий узел в строку и возвращает длину.

  • string substring(string, number, number?) Первый параметр указывает строку, второй — начальную позицию (индексы xpath начинаются с 1), а третий — длину, которую нужно усечь. Здесь мы должны обратить внимание на синтаксис xpath, это не конечная позиция.

substring("12345", 1.5, 2.6) возвращает «234».

substring("12345", 2, 3) возвращает «234».

  • string substring-ex(string, number, number) Первый параметр указывает строку, второй — начальную позицию (используются индексы java, начинающиеся с 0), а третий — конечную позицию (поддерживаются отрицательные числа). Это расширенные функции JsoupXpath, удобные для разработчиков, привыкших к java.

  • string substring-after(string, string) усекает часть после второй строки в первой строке.

  • string substring-before(string, string) усекает часть перед позицией последнего вхождения второй строки в первую строку.

Разработчик добавляет функции

Вышеупомянутые функции являются лишь стандартными функциями в Xpath 1.0. Разработчики также могут быстро и легко добавлять пользовательские функции, просто нужно реализовать интерфейс org.seimicrawler.xpath.core.Function.java и вызвать Scanner.registerFunction (Class <? Extends Function> func), когда ваша система инициализируется. Нет необходимости изменять парадигму синтаксиса, поскольку JsoupXpath может распознавать и загружать во время выполнения. Вы можете отправить запрос на извлечение в основной репозиторий о функциях в стандартном синтаксисе, которые ещё не реализованы JsoupXpath.

NodeTest

  • allText() извлекает весь текст под узлом, вместо использования рекурсивного текста, такого как // div / h3 // text ().

  • html() получает внутренний html всех узлов.

  • outerHtml() получает весь html всех узлов, включая сам узел.

  • num() извлекает все числа в собственном тексте узла. Если вы знаете, что в собственном тексте узла есть только одно число (текст, содержащийся в дочерних узлах), например, количество прочтений, количество комментариев и цена, вы можете напрямую извлечь его. Если есть несколько чисел, будет извлечено первое совпадающее последовательное число.

  • text() извлекает собственный текст узла.

  • node() извлекает все узлы.

axis

AxisName: 'ancestor'         // Select from the ancestors of the node in the current context
  | 'ancestor-or-self'            // Select from the ancestors of the node and the node itself in the current context
  | 'attribute'                        // Operations for extracting node attributes
  | 'child'                              // Select from the child nodes of the node in the current context. This is the default axis of xpath. For example, /div/li is the shorthand of /div/child::li
  | 'descendant'                   // Select from the descendants of the node in the current context
  | 'descendant-or-self'        // Select from the descendants of the node and the node itself  in the current context
  | 'following'                        // Select from all nodes behind the node in the current context
  | 'following-sibling'            //

``` | Оператор | Значение |
| --- | --- |
| *Select from all sibling nodes behind the node in the current context* |  
| parent '                           // Select from the parent of the node in the current context | Выбрать из родительского узла текущего контекста |
| 'preceding'                     // Select from all nodes before the node in the current context | Выбрать все узлы перед текущим узлом |
| 'preceding-sibling'          // Select from all sibling nodes before the node in the current context | Выбрать всех предшествующих братьев и сестёр текущего узла |
| 'self'                               // Select in current context | Выбрать текущий узел |
| 'following-sibling-one'     // Select from the following sibling node of the node in the context (JsoupXpath expansion) | Выбрать следующего брата или сестру текущего узла (расширение JsoupXpath) |
| 'preceding-sibling-one'     // Select the preceding sibling node of the node in the context (JsoupXpath extension) | Выбрать предыдущего брата или сестру текущего узла (расширение JsoupXpath) |
| 'sibling'                           // All siblings (JsoupXpath extension) (under development ...) | Все братья и сёстры (расширение JsoupXpath, в разработке...) |
|  ; |  |
### Operator ###

MINUS : '-'; PLUS : '+'; DOT : '.'; MUL : ''; DIVISION : 'div'; MODULO : 'mod'; DOTDOT : '..'; AT : '@'; COMMA : ','; PIPE : '|'; LESS : '<'; MORE_ : '>'; LE : '<='; GE : '>='; START_WITH : '^='; // a^=b a startwith b (JsoupXpath extension) END_WITH : '$='; // a*=b a contains b (JsoupXpath extension) CONTAIN_WITH : '='; // a contains b (JsoupXpath extension) REGEXP_WITH : '='; // the content of a matches the regular expression b (JsoupXpath extension) REGEXP_NOT_WITH : '!'; // the content of a does not match the regular expression b (JsoupXpath extension)

Applied items

Currently, JsoupXpath is widely used in projects or organizations such as SeimiCrawler. If you also have a project using JsoupXpath and want to appear in this list, you can contact me through the following contact details, the mail format can be:

Project or organization name: XX
Project or organization URL: http://xxx.xxx.cc

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/xiaohuo-JsoupXpath.git
git@api.gitlife.ru:oschina-mirror/xiaohuo-JsoupXpath.git
oschina-mirror
xiaohuo-JsoupXpath
xiaohuo-JsoupXpath
master