Парсинг і обробка веб-сторінки на php вибираємо кращу бібліотеку

Парсинг і обробка веб-сторінки на php вибираємо кращу бібліотеку

Завдання Спарс і обробити необхідну інформацію зі стороннього сайту встає перед веб-розробником досить часто і з найрізноманітніших причин: таким чином можна заповнювати свій проект контентом, динамічно довантажувати якусь інформацію і так далі.

У таких випадках перед програмістом постає питання: яку з десятків бібліотек вибрати? У цій статті ми постаралися розглянути найпопулярніші варіанти і вибрати з них найкращий.

Регулярні вирази

Навіть не дивлячись на те, що «регулярки» - це перше, що спадає на думку, використовувати їх для справжніх проектів не варто.

Так, з простими завданнями регулярні вирази справляються краще за всіх, але його використання значно ускладнюється, коли потрібно Спарс великий і складний шматок HTML-коду, який, до того ж, не завжди відповідає якомусь певним шаблоном і взагалі може містити синтаксичні помилки.

XPath і DOM

DOM і XPath не є бібліотеками в звичному сенсі цього слова, це стандартні модулі, які вбудовані в PHP починаючи з п'ятої версії. Саме відсутність необхідності використовувати сторонні рішення робить їх одними з кращих інструментів для парсинга HTML сторінок.

На перший погляд може здатися, що низький поріг входу - це не про них, деякі місця і справді є дуже складними. Але це тільки на перший погляд: варто тільки трохи розібратися з синтаксисом і базовими принципами, як XPath тут же стане для вас інструментом для парсинга номер один.

Ось, наприклад, код з використанням DOM і XPath, який шукає в розмітці все теги і модифікує їх атрибути src:

Проте, даний варіант не позбавлений мінусів - для парсинга використовується движок, в першу чергу призначений для роботи з XML, а XML і HTML хоч і є дуже схожими мовами, але все-таки різняться. З цього випливають специфічні вимоги до розмітки: наприклад, всі HTML теги повинні бути закриті.

Simple HTML DOM

Simple HTML DOM - PHP-бібліотека, що дозволяє довільні HTML-код за допомогою зручних jQuery-подібних селектор.

Вона позбавлена ​​головного недоліку XPath - бібліотека вміє працювати навіть з невалідним HTML-кодом, що значно спрощує роботу. Ви також забудете про проблеми з кодуванням: всі перетворення виконуються автоматично.

У цьому прикладі спочатку завантажується, а потім модифікується заздалегідь заготовлений HTML-код: у другому рядку відбувається додавання атрибута class зі значенням bar першому ліпшому елементу div. а в наступному рядку ми замінюємо текст елемента з id = "world" на foo.

$ Html = str_get_html ( '

Hello
World
');

$ Html -> find ( 'div'. 1) -> class = 'bar';

$ Html -> find ( 'div [id = world]'. 0) -> innertext = 'foo';

Незважаючи на не найвищу продуктивність, в порівнянні з іншими варіантами, Simple HTML DOM має найбільше російськомовне ком'юніті і найбільшу поширеність в рунеті - для новачків це робить написання коду з її використанням значно простіше.

Перенесено майже все, що є в JS-фреймворку: підтримка селектор, атрибутів, маніпуляцій, обходу, плагінів, подій (в тому числі імітації кліків і т.д.) і навіть AJAX. Використовувати можна як через PHP, так і через командний рядок у вигляді окремого додатка.

Більш того, згідно з нашим бенчмарк, phpQuery виявився в 8 (!) Разів швидше Simple HTML DOM.

Ось невеликий приклад на phpQuery, в якому відбувається обробка заздалегідь вибраних елементів списку (li):

Як і зі звичайними mysql_ функціями, скориставшись методами fetch_array () або fetch_objects (), ми можемо отримати результат виконання даного запиту у вигляді звичного асоціативного масиву або об'єкта.

Варто також згадати про високу швидкодію htmlSQL: часто вона справляється в кілька разів швидше phpQuery або того ж Simple HTML DOM.

Проте, для складних завдань вам може не вистачити функціональності, а розробка бібліотеки давно припинена. Але навіть незважаючи на це, вона все ще становить інтерес для веб-розробників: в ряді випадків значно зручніше використовувати мову SQL разом CSS-селекторів. Особливо коли ви не знаєте, що таке CSS-селектори 😉

У своєму міні-дослідженні ми дійшли висновку, що в більшості випадків для парсинга краще використовувати бібліотеку phpQuery: вона швидка, функціональна і сучасна.

З іншого боку, для зовсім простих завдань логічно було б використовувати стандартні модулі PHP, такі як XPath, DOM або, на крайній випадок, регулярні вирази.

Щось ще?

Для PHP існують ще десятки різноманітних бібліотек і інструментів для парсинга, але в цій статті ми розглянули лише найцікавіші, функціональні і продуктивні.

Якщо ви не використовуєте PHP, то можете ознайомиться з коротким списком схожих інструментів для інших мов програмування: