Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

html2k/DiDOM

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

29 Commits

Repository files navigation

DiDOM

Build Status Total Downloads Latest Stable Version License

DiDOM - простая и быстрая библиотека для парсинга HTML.

Содержание

Установка

Для установки DiDOM выполните команду:

composer require imangazaliev/didom

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

use DiDom\Document;
$document = new Document('http://www.news.com/', true);
$posts = $document->find('.post');
foreach($posts as $post) {
 echo $post->text(), "\n";
}

Создание нового документа

DiDom позволяет загрузить HTML несколькими способами:

Через конструктор
//в первом параметре передается строка с HTML
$document = new Document($html);
 
//путь к файлу
$document = new Document('page.html', true);
//или URL
$document = new Document('http://www.example.com/', true);

Второй параметр указывает на то, что загружается файл. По умолчанию - false.

Через отдельные методы
$document = new Document();
 
$document->loadHtml($html);
 
$document->loadHtmlFile('page.html');
$document->loadHtmlFile('http://www.example.com/');

Поиск элементов

В качестве выражения для можно передать CSS-селектор или XPath-путь. Для этого в первом параметре нужно передать само выражение, а во втором - его тип (по умолчанию - Query::TYPE_CSS):

Через метод find():
use DiDom\Document;
use DiDom\Query;
 
...
//CSS-селектор 
$posts = $document->find('.post');
//XPath-путь
$posts = $document->find("//div[contains(@class, 'post')]", Query::TYPE_XPATH);
Через магический метод __invoke():
$posts = $document('.post');
Через метод xpath():
$posts = $document->xpath("//*[contains(concat(' ', normalize-space(@class), ' '), ' post ')]");

Можно осуществлять поиск и внутри элемента:

echo $document->find('.post')[0]->find('h2')[0]->text();

Если элементы, соответствующие заданному выражению, найдены, вернется массив с экземплярами DiDom\Element, иначе - пустой массив.

Проверка наличия элемента

Проверить наличие элемента можно с помощью метода has():

if ($document->has('.post')) {
 //код
}

Если нужно проверить наличие элемента, а затем получить его, то можно сделать так:

if ($document->has('.post')) {
 $elements = $document->find('.post');
 //код
}

но быстрее так:

if (count($elements = $document->find('.post')) != 0) {
 //код
}

т.к. в первом случае выполняется два запроса.

Вывод содержимого

Получение HTML

Через метод html():
$posts = $document->find('.post');
echo $posts[0]->html();
Приведение к строке:
$html = (string) $posts[0];

Получение содержимого

$posts = $document->find('.post');
echo $posts[0]->text();

Создание нового элемента

use DiDom\Element;
$element = new Element('span', 'Hello');
 
// Выведет "<span>Hello</span>"
echo $element->html();

Первым параметром передается название элемента, вторым - его значение (необязательно).

Работа с атрибутами элемента

Получение названия элемента

$name = $element->tag;

Создание/изменение атрибута

Через метод setAttribute:
$element->setAttribute('name', 'username');
Через метод attr:
$element->attr('name', 'username');
Через магический метод __set:
$element->name = 'username';

Получение значения атрибута

Через метод getAttribute:
$username = $element->getAttribute('value');
Через метод attr:
$username = $element->attr('value');
Через магический метод __get:
$element->name = 'username';

Если атрибут не найден, вернет null.

Проверка наличия атрибута

Через метод hasAttribute:
if ($element->hasAttribute('name')) {
 //код
}
Через магический метод __isset:
if (isset($element->name)) {
 //код
}

Удаление атрибута:

Через метод removeAttribute:
$element->removeAttribute('name');
Через магический метод __unset:
unset($element->name);

Работа с кэшем

Кэш - массив XPath-выражений, полученных из CSS.

Получение кэша

use DiDom\Document;
use DiDom\Query;
 
...
$xpath = Query::compile('h2');
//array('h2' => '//h2')
$compiled = Query::getCompiled();

Установка кэша

Query::setCompiled(['h2' => '//h2']);

Сравнение с другими парсерами

Сравнение с другими парсерами

About

Simple and fast HTML parser

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • PHP 100.0%

AltStyle によって変換されたページ (->オリジナル) /