PHP SDK: Dom: поиск в HTML
Переменная $dom получается из $response->dom() либо $ctx->dom($html, $baseUrl). CSS-селектор описывает элемент, например .product-card, h1, [data-sku]. Поддерживается ограниченное подмножество CSS; проверяйте селекторы в маппере.
Методы
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; выражение должно содержать захватывающую группу.