В данной записи я расскажу вам как написать парсер для получения информации из интернет-магазина и записать результат в Excel файл. По итогу мы получим данные в xlsx формате.
Библиотека PHP Excel — https://disk.yandex.ru/d/TYrjFtkeeE2lbw
Урок по 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);