Краулер DOM
Дата оновлення перекладу 2022-11-24
Краулер DOM
Екземпляр Краулеру повертається кожний раз, коли ви робите запит з Клієнтом. Він дозволяє вам траверсувати документи HTML або XML: обирати вузли, знаходити посилання та форми і вилучати атрибути або зміст.
Траверсування
Як і jQuery, краулер має методи траверсування DOM документу HTML/XML. Наприклад,
наступне знайде всі елементи input[type=submit]
, обере останній на сторінці,
а потім обере його найближчий батьківський елемент:
1 2 3 4 5
$newCrawler = $crawler->filter('input[type=submit]')
->last()
->parents()
->first()
;
Доступні також багато інших методів:
filter('h1.title')
- Вузли, що співпадають з селектором CSS.
filterXpath('h1')
- Вузли, що співпадають з виразом XPath.
eq(1)
- Вузол для вказаного індексу.
first()
- Перший вузол.
last()
- Останній вузол.
siblings()
- Сіблінги.
nextAll()
- Всі наступні сіблінги.
previousAll()
- Всі попередні сіблінги.
parents()
- Повертає батьківські вузли.
children()
- Повертає дочірні вузли.
reduce($lambda)
- Вузли, для яких викличне не повертає false.
Так як кожний з цих методів повертає новий екземпляр Crawler
, ви
можете звузити ваш вибір вузлів, створивши ланцюжок викликів методів:
1 2 3 4 5 6 7 8 9
$crawler
->filter('h1')
->reduce(function ($node, $i) {
if (!$node->attr('class')) {
return false;
}
})
->first()
;
Tip
Використайте функцію count()
, щоб отримати кількість вузлів, що
зберігаються у краулері: count($crawler)
Вилучення інформації
Краулер може вилучати інформацію з вузлів:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
// повертає значення атрибуту першого вузла
$crawler->attr('class');
// повертає значення вузла першого вузла
$crawler->text();
// повертає текст за замовчуванням, якщо вузол не існує
$crawler->text('Default text content');
// передає TRUE в якості другого аргументу text(), щоб видалити всі зайві пробіли, включно
// з внутрішніми (наприклад, " foo\n bar baz \n " повертається як "foo bar baz")
$crawler->text(null, true);
// вилучає масив атрибутів для всіх вузлів
// (_text повертає значення вузла)
// повертає масив для кожного елементу у краулері,
// кожний зі значенням та href
$info = $crawler->extract(['_text', 'href']);
// виконує лямбду для кожного вузла і повертає масив результатів
$data = $crawler->each(function ($node, $i) {
return $node->attr('href');
});