8000 GitHub - html2k/DiDOM: Simple and fast HTML parser
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

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%
0