Парсинг контента сайта
Меню
Отредактировано: 30 Ноября 2017
Стандартными функциями 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 можно на гитхабе.
Порядок действий:
- Скачиваем библиотеку, закидываем в специальную папку (в примере использован корень сайта), идем в шаблон и подключаем там файл
<?php include '../phpQuery.php'; ?>
- Пишем код
/* Получаем 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'); // сохранение файла