Як вибрати бібліотеку для парсингу на PHP | robot_dreams
Для відстеження статусу замовлення - авторизуйтесь
Введіть код, який був надісланий на пошту Введіть код із SMS, який був надісланий на номер
 
Код дійсний протягом 2 хвилин Код з SMS дійсний протягом 2 хвилин
Ви впевнені, що хочете вийти?
Сеанс завершено
На головну
Від Simple HTML DOM до phpQuery

Від Simple HTML DOM до phpQuery

Як обрати бібліотеку для парсингу на PHP

Парсинг — це пошук та обробка даних у структурований формат. Розробники парсять, щоб переносити інформацію з одного сайту на інший, заповнювати його контентом і довантажувати дані за допомогою PHP, використовують сторонні бібліотеки або регулярні вирази («регулярки»). Вони добре справляються з простими завданнями — наприклад, робота з тегами, налаштування цілей або фільтрація текстової інформації. Але якщо потрібно спарсити складний шматок HTML-коду — краще звертатися до бібліотек.

Розповідаємо про основні бібліотеки для парсингу та обробки сторінок на PHP.

Навіщо потрібен PHP

PHP (Hypertext Preprocessor) — це інтерпретована мова програмування, яка виникла 1995 року, і її використовують досі. Найчастіше — у веброзробці. Код PHP можна одразу впроваджувати в HTML, але мова не обмежується створенням сайтів. На PHP пишуть скрипти, які працюють на стороні сервера (backend) і за допомогою яких можна, наприклад, приймати й надсилати cookies, створювати динамічні сторінки, обробляти та структурувати дані.

PHP підійде новачкам. Щоб освоїти мову, можна почати з вивчення систем управління контентом (CMS), які складаються з готових модулів і можуть наповнювати сайт контентом із фото та без (Wordpress) або керувати замовленнями й товарами (Magendo). Системи управління допомагають створювати сайти без коду, але не дозволяють змінювати логіку або дизайн ресурсів. Тому після CMS краще продовжувати «занурення» в PHP, вивчаючи шаблони опису програмного продукту (MVC) та об’єктно-орієнтоване програмування (OOP).

Ключові PHP-бібліотеки

1. Simple HTML DOM

Універсальна PHP-бібліотека для парсингу HTML-коду за допомогою jQuery-подібних селекторів. jQuery — це бібліотека JavaScript, яка дає змогу створювати анімації та спрощує роботу з DOM, AJAX і CSS.

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

Приклад запиту Simple HTML DOM (витягуємо всі посилання зі сторінки):

<?php 
require('simple_html_dom.php'); 
// Create DOM from URL or file 
$html = file_get_html('http://www.primewire.ag/watch-2805774-Star-Wars-The-Last-Jedi-online-free'); 
// Find All Movie Links 
$linkPrefix = 'http://primewire.ag'; 
$linkClass; 
foreach($html->find(".movie_version_link") as $linkClass) { 
echo "Link: ",$linkPrefix,$linkClass->find('a',0)->href,"<br/>\n"; 
} 
?>

2. phpQuery

Як і HTML DOM, phpQuery використовують для парсингу HTML-коду за допомогою jQuery-подібних селекторів. Ця бібліотека допомагає працювати з HTML-рядком як із деревом DOM, але, на відміну від DOM і XPath, вона не вбудовується в модулі PHP. phpQuery можна застосовувати і через PHP, і через командний рядок.

Приклад використання:

<?php
declare(strict_types=1);
namespace Gdbots\Tests\QueryParser;
use Gdbots\QueryParser\QueryParser;
use PHPUnit\Framework\TestCase;
class QueryParserTest extends TestCase
{
protected ?QueryParser $parser = null;
public function setUp(): void
{
$this->parser = new QueryParser();
}
/**
* @dataProvider getTestQueries
*
* @param string $name
* @param string $input
* @param null   $ignored
* @param array  $expectedNodes
*/
public function testParse(string $name, string $input, $ignored, array $expectedNodes = []): void
{
$result = $this->parser->parse($input);
$this->assertEquals($expectedNodes, $result->getNodes(), "Test query [{$name}] with input [{$input}] failed.");
}
public function getTestQueries(): array
{
return require __DIR__ . '/Fixtures/test-queries.php';
}
}
}

3. htmlSQL

Це дослідницька PHP-бібліотека, придумана 2006 року німецьким розробником Джонасом Джоном. htmlSQL дає змогу керувати HTML-розміткою за допомогою SQL-подібних запитів. Це означає, що для вилучення потрібних значень вам не доведеться писати складні функції або використовувати «регулярки».

htmlSQL зазвичай виконує завдання швидше, ніж Simple HTML DOM. Але для складних завдань (наприклад, перенесення великого масиву даних) функціонала htmlSQL може не вистачити.

Приклад запиту htmlSQL:

SELECT href,title FROM a WHERE $class == "list"
       ^ Attributes    ^       ^ search query (can be empty)
         to return     ^
                       ^ HTML tag to search in
                         "*" is possible = all tags

4. DOMXPath

DOM і XPath — це не бібліотеки, а вбудовані модулі PHP. DOM — об’єктна модель документа, тобто документ або його фрагмент, що складається з XML-вузлів. А XPath — синтаксис для навігації по DOM для пошуку одного або декількох вузлів, розташованих у формі дерева. DOMXPath — частина розширення PHPs DOM, клас XPath з розширення PHPs DOM.

DOM і XPath вважають універсальними, але вони мають вимоги до розмітки, за якими всі HTML-теги мають бути закриті.

Приклад запиту на XPath (шукаємо книги, написані певним автором):

<?php
public function getNumberOfBooksByAuthor($author)  {
    $query = "//library/book/author1/..";
    $xpath = new DOMXPath($this->domDocument);
    $result = $xpath->query($query);
    return $result->length;
}
Ще статті
Порівнюємо швидкість, якість і відповідальність за результат