Парсинг контента сайта

Стандартными функциями php

<?php
$url = "site.dom"

/* Получаем данные по ссылке и записываем их себе */
$temp = file_put_contents('temp.html', file_get_contents("$url"));

/* Получаем данные из файла */
$html = file_get_contents('temp.html');

/* Пишем условие которое надо извлечь */
preg_match_all('<h1>(.+?)</h1>/is', $html, $matches);

/* Выводим */
if ($matches[0] == '') {
    echo "тут пусто";
} else {
    echo $matches[0][0]; /* Если результат один */
    foreach ( $matches[0] as $value ) echo $value; /* Если в результате массив */
}

Используя библиотеку phpQuery

Используя специальные библиотеки гораздо проще вытащить нужный кусок контента.

Скачать библиотеку phpQuery можно на гитхабе.

Порядок действий:

  1. Скачиваем библиотеку, закидываем в специальную папку (в примере использован корень сайта), идем в шаблон и подключаем там файл
    <?php 
    
    include '../phpQuery.php';
     
    ?>
  2. Пишем код
    /* Получаем html код страницы которую собираемся спарсить */
    $site = 'https://modx.pro';
    $html = file_get_contents($site);
    
    /* Создаем объект phpQuery */
    $doc = phpQuery::newDocument($html);
    
    /* Ищем обертку нужного фрагмента и указываем ее как область для следующего поиска */
    $item = $doc->find('.content-page');
    $pq = pq($item);
    
    /* Ищем нужные элементы (функция text указывает что теги не нужны) */
    $title = $pq->find('.title')->text();
    $date = $pq->find('.editedon')->text();
    $content = $pq->find('.content');
    
    /* Записываем все в массив */
    array_push($out, array(
            'title' => $title,
            'date' => $date,
            'content' => $content
        ));
    
    /* Выводим в нужном формате */
    return '<h3>'.$out[0][title].'</h3><div class="update">'.$out[0][date].'</div><div>'.$cont.'</div>';

Сохранение результата в CSV

/* Открываем файл для записи */
$fp = fopen('file.csv', 'w');

/* Записываем данные из массива */
foreach ($out as $fields) {
   fputcsv($fp, $fields);
}

/* Закрываем файл */
fclose($fp);

Сохранение результата в XML с использованием simpleXML

/* Создаем XML-строку и XML-документ при помощи DOM */
$dom = new DomDocument('1.0','UTF-8'); 

/* добавляем корень - <items> */
$items= $dom->appendChild($dom->createElement('items')); 

/* добавляем данные об элементе - <item> */
for ($i = 0; $i < count($out); $i++) 
  { 
$item = $items->appendChild($dom->createElement('item')); 
$title = $item->appendChild($dom->createElement('title')); 
$date = $item->appendChild($dom->createElement('date'));
$content = $item->appendChild($dom->createElement('content'));

/* добавляем элемент текстового узла <title> в <title> */
$title->appendChild( 
                $dom->createTextNode($out[$i]['title']));
$workshop->appendChild( 
                $dom->createTextNode($out[$i]['date']));
}

/* генерируем xml */ 
$dom->formatOutput = true; // установка атрибута formatOutput
                           // domDocument в значение true 
// save XML as string or file 
echo $dom->saveXML();  
$dom->save('test.xml'); // сохранение файла