Парсинг определенного текста

208
05 марта 2022, 18:50

Есть код

<div class="tezt">
<div id="news-id-715733056" style="display:inline;">
    <!--TBegin:/uploads/posts/2020-01/1579537868-1282945508.jpg|left-->
    <a href="/uploads/posts/2020-01/1579537868-1282945508.jpg" onclick="return hs.expand(this)"><img src="/uploads/posts/2020-01/thumbs/1579537868-1282945508.jpg" style="float:left;" alt="Дело Коллини" title="Дело Коллини"></a>
    <!--TEnd-->
     Каспару Лайнену предстоит расследовать запутанное дело непримечательного механика, итальянца Фабрицио Коллини, который на первый взгляд безо всяких мотивов убил немецкого бизнесмена Ханса Майера, после чего сам сдался полиции. Положение вещей осложняется не только молчанием Коллини и более опытным адвокатом, претендующим на пост главного героя, но и его личным причастием к делу: внучка жертвы Йоханна была его юношеской любовью. Однако Лайнену случайно удаётся найти зацепку, благодаря которой он понимает, что столкнулся с крупнейшим судебным скандалом Германии....
     <br>
     <br>
     imdb: 7.20 (2098) | Кинопоиск: 6.790 (528)
     <br>
     <br>
     Качество: BDRip 1080p (перезалит)
     <br>
     Перевод: Дублированный | iTunes
     <br>
     Страна: Германия
     <br>
     Продолжительность: 118 мин. / 01:58
     <br>
     <br>
     Оригинальное название: Der Fall Collini
     <br>
     Режиссер: Марко Кройцпайнтнер
     <br>
     Год: 2019
     <br>
     В ролях: Элиас ЭмБарек, Хайнер Лаутербах, Александра Мария Лара, Франко Неро, Манфред Цапатка, Яннис Нивёнер, Райнер Бок, Катрин Штрибек, Пиа Стутценштайн, Петер Прагер
</div>

Как средствами php вытянуть данные, что бы было примерно так

$param1 = 'imdb: 7.20 (2098) | Кинопоиск: 6.790 (528)'

$param2 = 'Год: 2019'

$param3 = 'Качество: BDRip 1080p (перезалит)'

Answer 1

Конкретно для вашего случая, можно использовать следующий вариант:

// Убираем все html теги.
$str = strip_tags($str);
// Убираем все '\r'.
$str = preg_replace("/(\r)/", '', $str);
// Разбиваем строку по разделителю.
$str = explode("\n", $str);
$str = array_reduce($str, function ($carry, $item) {
    // Убираем лишние пробелы перед началом строк
    $item = preg_replace("/^\s+/", '', $item);
    if ($item !== '') { // Фильтруем значения.
        array_push($carry, $item);
    }
    return $carry;
}, []);
return $str;

Результат:

[
    "Каспару Лайнену предстоит расследовать запутанное дело непримечательного механика, итальянца Фабрицио Коллини, который на первый взгляд безо всяких мотивов убил немецкого бизнесмена Ханса Майера, после чего сам сдался полиции. Положение вещей осложняется не только молчанием Коллини и более опытным адвокатом, претендующим на пост главного героя, но и его личным причастием к делу: внучка жертвы Йоханна была его юношеской любовью. Однако Лайнену случайно удаётся найти зацепку, благодаря которой он понимает, что столкнулся с крупнейшим судебным скандалом Германии....",
    "imdb: 7.20 (2098) | Кинопоиск: 6.790 (528)",
    "Качество: BDRip 1080p (перезалит)",
    "Перевод: Дублированный | iTunes",
    "Страна: Германия",
    "Продолжительность: 118 мин. / 01:58",
    "Оригинальное название: Der Fall Collini",
    "Режиссер: Марко Кройцпайнтнер",
    "Год: 2019",
    "В ролях: Элиас ЭмБарек, Хайнер Лаутербах, Александра Мария Лара, Франко Неро, Манфред Цапатка, Яннис Нивёнер, Райнер Бок, Катрин Штрибек, Пиа Стутценштайн, Петер Прагер"
]
Answer 2

Если задача не единичная и парсер должен отработать множество элементов, то проще будет использовать библиотеку для парсинга. Например PHPHtmlParser.

Пример работы кода будет такой:

$dom = new Dom;
$dom->loadFromFile('fileOrURLorHTML');
$games = $dom->find('#news-id');
$parcedNews = explode('<br>', $news);
READ ALSO
Приходит ответ без нужного блока

Приходит ответ без нужного блока

Есть функция парсинга количества страниц в индексе Google

104
Как построить архитектуру сайта .Сайт будет предназначен для каждого региона

Как построить архитектуру сайта .Сайт будет предназначен для каждого региона

Для каждого региона создавать свой сайт с по доменом или как ? Что бы поисковики выдавали сразу информацию для клиента по его регионаПишу...

83
PHPSPREADSHEET задать формулу

PHPSPREADSHEET задать формулу

Как в библиотеке phpspreadsheet можно задать формулу A1 * A2 * A3 / A4?

77