Парсинг на PHP с формированием данных в Excel

31.03.2022
Содержание:

В данной записи я расскажу вам как написать парсер для получения информации из интернет-магазина и записать результат в Excel файл. По итогу мы получим данные в xlsx формате.

Урок по phpQuery — https://prog-time.ru/parsing-php-biblioteka-phpquery/

Библиотека phpQuery — https://code.google.com/archive/p/phpquery/downloads

Уроки по Curl — https://prog-time.ru/parsing-php-ottachivaem-curl/

Полная документация для PHPExcel на русском языке — https://disk.yandex.ru/i/BNlk1Kv1TSxwmQ

Функции для отладки парсинга


function vardump($str){
    echo "<pre>";
    var_dump($str);
    echo "</pre>";
}

/* для указания кодировки utf-8 */
header('Content-type: text/html; charset=utf-8');
setlocale(LC_ALL, 'ru_RU.UTF-8');


/* для вывода ошибок */
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);

Функция для парсинга через Curl

function parser($urlPage) {
    $ch = curl_init($urlPage);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_HEADER, false);
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

Код для парсинга и получения информации


$urlCatalog = "https://elektronika.store/";
$result = parser($urlCatalog);

$pq = phpQuery::newDocument($result);

/* получаем дополнительные параметры для  */
$listParamsProduct = $pq->find(".product-thumb-block a");
foreach($listParamsProduct as $link) {
	$elemLink = pq($link);
	$arrLinks[] = "https://elektronika.store".$elemLink->attr("href");
}



foreach($arrLinks as $link) {
	$result = parser($link);
	$pq = phpQuery::newDocument($result);

	/* важные параметры для товара */
	$arrMainParams = [
		"url" => $link,
		"price" => preg_replace("/[^0-9]*/", "", $pq->find("#price-field")->text()),
		"oldPrice" => preg_replace("/[^0-9]*/", "", $pq->find("#old-price-field")->text()),
		'name' => $pq->find("h1")->text(),
		'description' => trim($pq->find("#tab-description-content")->text()),
	];


	/* получаем изображения */
	$listImages = $pq->find("a.js-varaint-image");
	foreach($listImages as $image) {
		$elemImage = pq($image);

		$arrListImages[] = $elemImage->attr("data-image");
	}

	$arrListProduct[] = [
		'id' => '123123',
		'listImages' => $arrListImages,
		'listMainParams' => $arrMainParams,
	];

}

$jsonDataProduct = json_encode($arrListProduct);
file_put_contents("data_product.txt", $jsonDataProduct);

Код для формирования Excel файла в PHP


$jsonDataProduct = file_get_contents("data_product.txt");
$dataProducts = json_decode($jsonDataProduct, true);

$xls = new PHPExcel();

$xls->setActiveSheetIndex(0);
$sheet = $xls->getActiveSheet();
$sheet->setTitle('Лист товаров');


$sheet->setCellValue("A1", "ID");
$sheet->setCellValue("B1", "Название товара");
$sheet->setCellValue("C1", "Цена");
$sheet->setCellValue("D1", "Старая цена");
$sheet->setCellValue("E1", "Ссылка");
$sheet->setCellValue("F1", "Изображение");
$sheet->setCellValue("G1", "Описание ");


foreach($dataProducts as $key=>$product) {
	$index = $key + 2;

	$productParam = $product['listMainParams'];

	// $image = json_encode($product['listImages']);
	// $image = implode(";", $product['listImages']);
	$image = $product['listImages'][0];

	$sheet->setCellValue("A".$index, $product['id']);
	$sheet->setCellValue("B".$index, $productParam["name"]);
	$sheet->setCellValue("C".$index, $productParam["price"]);
	$sheet->setCellValue("D".$index, $productParam["oldPrice"]);
	$sheet->setCellValue("E".$index, $productParam["url"]);
	$sheet->setCellValue("F".$index, $image);
	$sheet->setCellValue("G".$index, $productParam["description"]);
}


$objWriter = new PHPExcel_Writer_Excel2007($xls);
$filePath = __DIR__ . "/file_catalog.xlsx";
$objWriter->save($filePath);
На этом всё!
Больше интересных статей в нашей группе - https://vk.com/progtime
Вы так же можете разместить свой вопрос на нашем форуме, где другие программисты смогут вам помочь в решение вашей задачи - https://vk.com/prog_time
Так же прокачивайте свои навыки на нашем канале - https://www.youtube.com/c/ProgTime
Наши планы
  • Написание материала для курса по разработке ботов на Telegram
  • Разработка универсального парсера на PHP

Поддержите мой сайт!

Каждый переведённый донат, мотивирует на создание новых записей и уроков на YouTube