РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1170 of 1361 menu

Метод extract класса Crawler

Метод extract класса Crawler извлекает данные из выбранных DOM-узлов в виде массива. Первым параметром передаётся массив правил извлечения, где ключ задаёт имя поля результата, а значение - правило (селектор или массив с селектором и атрибутом). Вторым параметром можно передать callback-функцию для постобработки каждого извлечённого значения.

Синтаксис

extract(array $rules, ?callable $callback = null): array

Пример

Давайте извлечём заголовок и текст статьи из HTML:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentDomCrawlerCrawler; use SymfonyComponentHttpFoundationResponse; class ArticleController extends AbstractController { public function index(): Response { $html = '<div class="article">' . '<h1>article 1</h1>' . '<p>hello</p>' . '</div>'; $crawler = new Crawler($html); $res = $crawler->filter('.article')->extract([ 'title' => 'h1', 'body' => 'p', ]); return new Response(json_encode($res)); } } ?>

Результат выполнения кода:

{"title":"article 1","body":"hello"}

Пример

Давайте извлечём значение атрибута, передав массив из селектора и имени атрибута:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentDomCrawlerCrawler; use SymfonyComponentHttpFoundationResponse; class ArticleController extends AbstractController { public function index(): Response { $html = '<a href="/user" class="link">abcde</a>'; $crawler = new Crawler($html); $res = $crawler->filter('.link')->extract([ 'url' => ['a', 'href'], ]); return new Response(json_encode($res)); } } ?>

Результат выполнения кода:

{"url":"/user"}

Пример

Давайте обработаем извлечённые значения через callback-функцию:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentDomCrawlerCrawler; use SymfonyComponentHttpFoundationResponse; class ArticleController extends AbstractController { public function index(): Response { $html = '<div class="article">' . '<h1>article 1</h1>' . '</div>'; $crawler = new Crawler($html); $res = $crawler->filter('.article')->extract( ['title' => 'h1'], function (string $value): string { return strtoupper($value); } ); return new Response(json_encode($res)); } } ?>

Результат выполнения кода:

{"title":"ARTICLE 1"}

Смотрите также

  • класс Crawler,
    который представляет DOM-узлы страницы
  • метод filter,
    который выбирает узлы по CSS-селектору
  • метод attr,
    который возвращает значение атрибута узла
  • метод text,
    который возвращает текст узла
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить