parschakov
@parschakov
Начинающий изучать PHP и JS

Как парсить данные используя Symphony DomCrawler?

Здравствуйте! Пытаюсь разобраться в парсинге на Laravel используя Symphony DomCrawler и прошу помощи разобраться. Изучая мануал, не все понятно и погуглив наткнулся на одну статью, уже не существующего сайта, но частично получив доступ через сохраненную копию яндекса.

Пример кода:
/**
 * Get content from html.
 *
 * @param $parser object parser settings
 * @param $link string link to html page
 *
 * @return array with parsing data
 * @throws \Exception
 */
public function getContent($parser, $link)
{
    // Get html remote text.
    $html = file_get_contents($link);

    // Create new instance for parser.
    $crawler = new Crawler(null, $link);
    $crawler->addHtmlContent($html, 'UTF-8');

    // Get title text.
    $title = $crawler->filter($parser->settings->title)->text();

    // If exist settings for teaser.
    if (!empty(trim($parser->settings->teaser))) {
        $teaser = $crawler->filter($parser->settings->teaser)->text();
    }

    // Get images from page.
    $images = $crawler->filter($parser->settings->image)->each(function (Crawler $node, $i) {
        return $node->image()->getUri();
    });

    // Get body text.
    $bodies = $crawler->filter($parser->settings->body)->each(function (Crawler $node, $i) {
        return $node->html();
    });

    $content = [
        'link' => $link,
        'title' => $title,
        'images' => $images,
        'teaser' => strip_tags($teaser),
        'body' => $body
    ];

    return $content;
}

И не понятна тут строка $parser, которую принимает метод getContent().
Что она должны содержать? Из метода видно, что она используется например как $parser->settings->teaser, и содержит селектор для поиска, но как создан этот объект?

В общем, прошу помощи, кто знает, кто пользуется данным способом.
Всем большое спасибо, заранее за ответы!
  • Вопрос задан
  • 3008 просмотров
Пригласить эксперта
Ответы на вопрос 2
Akuma
@Akuma
Веб-программист
Зачем вам вообще знать, что находится в свойствах этого объекта $parser?
Просто пишите свои селекторы и все. Самые обычные CSS селекторы (ну еще :contains поддерживается).

Вы вырвали метод из документации, а про контекст забыли. Это лишь пример. Перепишите на свой лад и проблема исчезнет сама-собой.
Ответ написан
Комментировать
UksusoFF
@UksusoFF
Скорее всего там css/xpath селекторы уникальные для конкретного сайта. В документации довольно подробно это описано.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы