1

Тема: Xpath - кому цікаво що це таке?

Всім привіт. Познайомився з xpath пів року назад. Від того часу всіх хто пише парсери переконую що це з одних найкращих технологій для витягування інформації з сторінки.

Якщо вам цікаво можу описати деталі роботи, навчити, розказати, та поділитись своїм класом для xpath.

Взагалі я думаю чи продовжувати писати серію статтей. На своєму блозі перша стаття уже є. Якщо є люди яким цікава ця фішка напишу і другу.

p.s. Ось посилання Парсер сайтів на Xpath. Урок 1 http://funivan.com/parser-saytiv-na-xpa … 1-p19.html

Подякували: Replace1

2

Re: Xpath - кому цікаво що це таке?

Парсери пишу на Python, набагато зручніше.
Якщо потрібно на php, то використовую pQuery.

Xpath колись вчив при роботі з Oracle Berkeley DB XML.

3

Re: Xpath - кому цікаво що це таке?

Пишу парсери на java, використовую html парсер Jsoup.

Щоб зрозуміти рекурсію потрібно спочатку зрозуміти рекурсію.
int fac(int n) { return n < 2 ? 1 : n*fac(n-1); }

4

Re: Xpath - кому цікаво що це таке?

А для тих хто знайомий лише з селекторами css, можна огляд фіч яких в css бракує?

5

Re: Xpath - кому цікаво що це таке?

bunyk написав:

А для тих хто знайомий лише з селекторами css, можна огляд фіч яких в css бракує?

В css бракує парсера)) Взагалі то Хpath створювався під xml, я не знаю як він працює з html. Мене цікавить чи Xpath впорається з протоколом HTTP чи йому потрібно допомагати, скоріше за все думаю що другий варіант.

Щоб зрозуміти рекурсію потрібно спочатку зрозуміти рекурсію.
int fac(int n) { return n < 2 ? 1 : n*fac(n-1); }

6

Re: Xpath - кому цікаво що це таке?

Парсер це окрема штука що перетворює текст XML в DOM. XPath я так розумію це мова запитів до дерева, як і селектори в CSS.

Подякували: Replace1

7

Re: Xpath - кому цікаво що це таке?

XPath я так розумію це мова запитів до дерева, як і селектори в CSS.

Саме так. Xpath - це мова запитів до дерева з метою отримання певних його елементів.

А для тих хто знайомий лише з селекторами css, можна огляд фіч яких в css бракує?

При чому тут css ? Це принципово інша штука і xpath наскільки мені відомо не вміє працювати з css!

8 Востаннє редагувалося Patron (28.09.2012 13:50:18)

Re: Xpath - кому цікаво що це таке?

funivan написав:

Xpath - це мова запитів до дерева з метою отримання певних його елементів.

Якщо це лише мова запитів то яким чином вона формує/створює/отримує елементи DOM? Чому тоді мова запитів css не отримує елементи DOM? А можливо там все ж таки є парсер? чи нема? А про те що це мова запитів я також можу у вікіпедії прочитати. Перед тим як робити висновок чи там є парсер чи нема, треба спробувати цю штуку на практиці а потім переписувати на форум речення із вікіпедії типу "мова запитів".

Щоб зрозуміти рекурсію потрібно спочатку зрозуміти рекурсію.
int fac(int n) { return n < 2 ? 1 : n*fac(n-1); }

9

Re: Xpath - кому цікаво що це таке?

Мене цікавить чи Xpath впорається з протоколом HTTP чи йому потрібно допомагати, скоріше за все думаю що другий варіант.

Xpath немає відношення до протоколу http. Він працює з готовим документом, тобто із його структурою. Xpath байдуже чи ви загрузили документ по мережі чи відкрили з локального диску.

Якщо це лише мова запитів то яким чином вона формує/створює/отримує елементи DOM

З цієї фрази можу сказати що xpath може тільки повертати елементи DOM,  атрибути елементів та числа.  Формувати, якщо я вас правильно зрозумів, та створювати елементи у дереві xpath не може.
Як за допомогою xpath отримати елементи:
Ось кусок коду з прикладом:

  # завантажуємо сторінку (html документ)
  $doc = new DOMDocument();
  $doc->loadHTMLFile('http://funivan.com/');    

  # ініціалізуємо клас і вказуємо з якого документу ми будемо отримувати інформацію
  $xpath    = new DOMXpath($doc);   

  # виконуємо запит до документу. "//*[@class='cat-item']/a" - це вираз на мові xpath
  $elements = $xpath->query("//*[@class='cat-item']/a"); /

  # $elements - це нода в якій існують елементи DOM Node
  foreach ($elements as $element) {
    # Виводим назву тегу
    echo '<br>'. $element->nodeName . ' > '; 
    # Виводимо значення
    echo $element->nodeValue . '<br>'; 
  }

Чому тоді мова запитів css не отримує елементи DOM?

CSS призначена для іншого задач аніж xpath. Як працює css і чому я не збираюсь висвічувати у цій темі.

Парсер це окрема штука що перетворює текст XML в DOM

Я говорив про парсер який використовує мову xpath для отримання інформації із документу.


п.с. Я можу помилятись, але я вирішив поділитись знаннями про xpath. Якщо ви знаєте що я у чомусь помиляюсь, дайте посилання на офіційні джерела і тикніть пальцем. Задавайте нормальні запитання, а не чому css не отримує чи ще щось у цьому дусі. Я вікіпедію не передруковую, до того ж у цій гілці форуму задавши запитання по темі я відповім на нього а не пошлю вас на вікіпедію. На практиці я пробував і не один раз.

10

Re: Xpath - кому цікаво що це таке?

як вже казав форумець bunyk "Парсер перетворює текст XML в DOM", тобто парсер перетворює те що зпарсив у DOM об'єкти. Якщо xpath це робить то він мусить мати парсер і це для нього не "окрема штука". А css  це просто мова запитів (але я би сказав не так, css - набір атрибутів/властивостей/параметрів які зчитує парсер  і застосовує до своїх DOM об'єктів).

Щоб зрозуміти рекурсію потрібно спочатку зрозуміти рекурсію.
int fac(int n) { return n < 2 ? 1 : n*fac(n-1); }