Парсинг сайтів на PHP
Ну ось мій рівень PHP дозволив мені почати робити свій каталог сайтів - які будуть парситись і заганятись в БД автоматично.
1. Як витягнути весь HTML і очистити його від стилів та скриптів в змінну $cleanHtml?
//=(1)-- Отримуємо весь HTML код сторінки та його очистка---------------------------------
$url = 'https://k-p.net.ua';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$res = curl_exec($ch);
curl_close($ch);
// Видаляємо всі теги <script>
$cleanHtml = preg_replace('/<script\b[^>]*>(.*?)<\/script>/is', '', $res);
// Видаляємо всі теги <style>
$cleanHtml = preg_replace('/<style\b[^>]*>(.*?)<\/style>/is', '', $cleanHtml);
// Видаляємо всі пусті строки
$cleanHtml = preg_replace('/^\h*\v+/m', '', $cleanHtml);
//------------------------------------
print_r($cleanHtml);
2. Приклади отримання ДУМ елементів:
$dom = new DomDocument();
@ $dom->loadHTML($res);
//Вибираємо ID DOMElement
$id_element = $dom->getElementById('content-tab2');
//Вибираємо елементи по імені
$elements = $dom->getElementsByTagName('div');
3. Отримуємо URl іконки сайту або фавікон:
//=(3)-- Отримуємо URl іконки сайту або фавікон ---------------------------------
// Знаходимо значення href з розмірами 32x32
preg_match('/<link\s+rel="icon"\s+type="image\/png"\s+sizes="32x32"\s+href="([^"]+)"/i', $res, $matches);
if (!empty($matches)) {
$favicon = $matches[1];
} else {
// Знаходимо значення href з розмірами 16x16
preg_match('/<link\s+rel="icon"\s+type="image\/png"\s+sizes="16x16"\s+href="([^"]+)"/i', $res, $matches);
if (!empty($matches)) {
$favicon = $matches[1];
} else {
$favicon = 'favicon';
}
}
// Виводимо отриманий значення favicon
//echo $favicon;
//=(4)-- /end -------------------------------------------------------------------
4. Як отримати заголовок та опис сайту і усі мета-теги:
// Отримуємо Title
$titleElement = $dom->getElementsByTagName('title')->item(0);
$title = $titleElement->textContent;
// Отримуємо мета-теги з сайту
$metaTags = get_meta_tags($url);
// Отримуємо Description
$description = isset($metaTags['description']) ? $metaTags['description'] : '';