К содержимому

Документация

PHP SDK: Dom: поиск в HTML

Переменная $dom получается из $response->dom() либо $ctx->dom($html, $baseUrl). CSS-селектор описывает элемент, например .product-card, h1, [data-sku]. Поддерживается ограниченное подмножество CSS; проверяйте селекторы в маппере.

Общий справочник SDK

Методы

q

q(string $css): ?Node

Найти первый HTML-элемент по CSS-селектору.

$card = $dom->q('.product-card');
if ($card === null) { $ctx->abort('Карточка не найдена'); }

Результат и особенности. Возвращает Node или null. Не вызывайте методы у null без проверки или оператора ?->.

qa

qa(string $css): array

Найти все подходящие HTML-элементы.

foreach ($dom->qa('.product-card') as $card) {
    $ctx->emit(['name' => $card->text()]);
}

Результат и особенности. Возвращает список Node. Если совпадений нет, список пустой.

first

first(array $cascade): ?Node

Попробовать несколько селекторов и взять первое найденное совпадение.

$title = $dom->first(['h1.product-title', '.product-name', 'h1'])?->text();

Результат и особенности. Возвращает Node или null. Порядок важен: проверяются селекторы слева направо.

text

text(string $css, ?string $default = null): ?string

Получить текст первого совпадения, не создавая промежуточную переменную Node.

$title = $dom->text('h1', 'Без названия');

Результат и особенности. Возвращает строку либо default (по умолчанию null). default используется, если элемента нет, но не заменяет пустой текст найденного элемента.

attr

attr(string $css, string $attribute, ?string $default = null): ?string

Прочитать атрибут первого найденного элемента.

$sku = $dom->attr('.product-card', 'data-sku', '');

Результат и особенности. Возвращает строку или default. Для полного URL используйте q(...)?->abs(...).

maxNumber

maxNumber(string $css): ?int

Найти наибольшее число в текстах элементов, например номер последней страницы.

$lastPage = $dom->maxNumber('.pagination a') ?? 1;

Результат и особенности. Возвращает int или null. Из каждого текста берётся первое целое число; стрелки без чисел пропускаются.

numbersByPattern

numbersByPattern(string $pattern, string $subject): array

Извлечь все числа из первой группы регулярного выражения в переданной строке.

$numbers = $dom->numbersByPattern('/page=(\d+)/', 'page=1 page=12');

Результат и особенности. Возвращает список целых чисел, в примере [1, 12]. Метод использует subject, а не автоматически весь HTML; выражение должно содержать захватывающую группу.