Всім хай. Кожному програмісту доводилось викачувати інформацію з сайтів. Сьогодні я почну цикл уроків про те як написати хороший парсер за мінімальний час. Бібліотеки які будуть розглянуті в цих уроках є самописні, особисто я використовую їх не тільки для отримання інформації а і для відправлення. Тобто це ніщо інше як роботи. Почнемо з того як найкраще витягувати інформацію з сайту за допомогою Xpath.
XPath - XML Path Language. Для того що б не передруковувати вікіпедію напишу що XPath - це шлях до елементу. Тобто для того що б нам витягнути певний елемент з документу XML чи HTML нам треба знати де він знаходиться. Деякі факти про XPath
- XPath - вираз який визначає частини документу XML
- XPath - використовує опис шляху для навігації в XML документі
- XPath - бібліотека яка включає стандартні функції
- XPath - основний елемент в XSLT
- XPath - стандартизований W3C
Ви не повірите, але перша версія XPath появилась в 1999 році. WAT???. На даний час затверджено XPath версії 2.0 Інші дані про XPath ви зможете знайти на вікіпедії а також на сайті W3C.
Перейдемо до прикладів і чому XPath краще в деяких випадках ніж регулярні вирази, на мою думку.
Для прикладу нам необхідно отримати всі посилання на сторінці.
Вираз буде наступний.
//a
а
- означає імя тегу. Всі ми знаємо що а - це посилання :)
//
- два слеші з початку означають що ми шукаємо посилання на будь-якому рівні документу.
В XPath ми працюємо з семантикою документа. Отже, є відносні й абсолютні шляхи.
Деякі прості приклади:
- Отримуємо всі посилання які розміщені в параграфі:
//p/a
- Отримуємо перший параграф
//p[1]
- Отримуємо останній параграф
//p[last()]
- Отримуємо всі елементи
//*
Як на мене за допомогою простого виразу XPath можна легко маніпулювати документом. Тобто Вам не потрібно писати багато РНР коду для того що б отримати останнє посилання в абзаці.
Як дізнатись шлях до елементу? Це дуже просто :) У всіх нормальних бравзерах є панель розробника там все написано. В самому низу і вказано шлях до елементу. Звісно писати повний шлях це маразм, а от вказати 2-3 параметра цілком логічно. Все залежить від структури документу.
Ось фактично основи XPath. Давайте тепер розглянемо як нам реально працювати з даними.
|
|
Ще декілька прикладів
xpath | опис |
---|---|
/* | Вибираємо всі елементи першого рівня |
//*[name() != 'a'] | Вибираємо всі елементи крім посилань |
//div[@class='text']//a" | Вибираємо всі посилання у divi з класом text |
//*[*]" | Вибираємо всі елементи у яких є хоча б 1н дочірній елемент |
//*[not(*)]" | Вибираємо всі елементи у яких немає дочірніх елементів |
Для початку достатньо, не буду Вас сильно навантажувати. В інтернеті багато інформації про Xpath. Якщо щось не зрозуміло або просто є запитання та побажання пишіть коментарі =)
Наступний урок буде про функції в xpath. (Урок 2)
Ще через один покажу свій клас для xpath і опишу як в 3 рядки можна отримати все що хочеш із сторінки. (Урок 3)
Дякую за увагу. Погнали кодити ;)