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

Класс Crawler

Класс Crawler из компонента Symfony DomCrawler предназначен для парсинга HTML и XML документов. Он позволяет перемещаться по DOM-дереву, фильтровать узлы с помощью CSS-селекторов или XPath-выражений и извлекать текст, атрибуты и HTML-содержимое элементов. Конструктор принимает массив узлов DOM или строку с HTML.

Синтаксис

use Symfony\Component\DomCrawler\Crawler; $crawler = new Crawler($html, $uri);

Пример

Давайте создадим объект Crawler и отфильтруем все ссылки из HTML-строки:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\DomCrawler\Crawler; use Symfony\Component\HttpFoundation\Response; class ArticleController extends AbstractController { public function index(): Response { $html = '<a href="/page1">article</a><a href="/page2">user</a>'; $crawler = new Crawler($html); $links = $crawler->filter('a')->each(function (Crawler $node) { return $node->attr('href'); }); return new Response(json_encode($links)); } } ?>

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

["/page1", "/page2"]

Пример

Давайте извлечём текст из нескольких параграфов:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\DomCrawler\Crawler; use Symfony\Component\HttpFoundation\Response; class ArticleController extends AbstractController { public function index(): Response { $html = '<p>hello</p><p>abcde</p><p>article</p>'; $crawler = new Crawler($html); $text = $crawler->filter('p')->each(function (Crawler $node) { return $node->text(); }); return new Response(json_encode($text)); } } ?>

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

["hello", "abcde", "article"]

Пример

Давайте используем XPath-выражение для поиска элементов с определённым атрибутом:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\DomCrawler\Crawler; use Symfony\Component\HttpFoundation\Response; class ArticleController extends AbstractController { public function index(): Response { $html = '<div class="item">hello</div><div class="item">abcde</div>'; $crawler = new Crawler($html); $res = $crawler->filterXPath('//div[@class="item"]')->each(function (Crawler $node) { return $node->text(); }); return new Response(json_encode($res)); } } ?>

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

["hello", "abcde"]

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

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