Существует код скрипта. Он парсит картинки так как надо и записывает в файл sql. Но необходимо чтобы еще записывал в файл описание и артикул товара. Но вот проблема, Он почему то записывает в файл не артикул а наименование товара, хотя в коде прописано условие через switch искать в теге - tr через массив по ключу слова. В чем может быть проблема????? Заранее спасибо.
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
</html>
<?php
include_once('curl/curl_query.php');
define('_DS_', DIRECTORY_SEPARATOR);
class tdm_parse
{
private $link = "http://tdme.ru";
//public $path = __DIR__ . _DS_ . "catalog" . _DS_;
// private $SHD_path = include('../shd/simple_html_dom.php');
//private $PHPExcel_path = __DIR__ . 'PHPExcel' . __DIR__ . 'PHPExcel.php' ;
/**
* @param $SHD_path - path to library simple html dom
* @return array|int - array of categories
*/
private function get_categories(){
//Получаем список категорий из сайдбара
$html = new simple_html_dom();
//$html = file_get_html('http://tdme.ru/product/');
//$html = str_get_html($html);
$html = curl_get('http://tdme.ru/product/');
$html = str_get_html($html);
if($categories = $html->find('div.sidebar ul.submenu')[1]->children){
//sleep(2);
$parsed_category = array();
foreach ($categories as $category){
$parsed_category[] = $category->outertext;
}
return $parsed_category;
}
}
/**
* @param $categories
* @return array
*/
private function get_models($categories){
//Подгружаем каждую из полученных категорий и вытаскиваем впоследствии список моделей из каждой подкатегории
$array_of_sub = array();
$html = new simple_html_dom();
if (isset($categories)){
foreach ($categories as $category){
$parent = new simple_html_dom();
//Создаем два объекта для подгрузки из распарсенного и из сайта
$parent->load($category);
//Получаем ссылку подкатегории и загружаем её страницу
$parent = $parent->find('a')[0]->href;
$html = curl_get($this->link . $parent);
$html = str_get_html($html);
//Загружаем ссылки всех подкатегорий
$subcategories = $html->find('ul.category')[0]->children;
foreach ($subcategories as $sub) {
$array_of_sub[] = $parent . $sub->find('a')[0]->href;
}}
return $array_of_sub;
}}
private function get_price($subcat){
$sql_file = fopen('base.sql', 'a+');
$path_to_images = __DIR__ . _DS_ ."catalog". _DS_ ;
$manufacturer_id = 25;
//Разбираем подкатегории на отдельные группы товаров
//$table_of_goods - таблица товаров общая
//$table_header, $table_body - заголовок и тело таблицы соответственно
$table_of_goods = new simple_html_dom();
$html_sub = file_get_html($this->link . $subcat);
// $html_sub = str_get_html($html_sub);
//var_dump(get_class($html_sub));
$description = new simple_html_dom();
//Получаем описание, полное для всех товаров (кроме характеристик)
$description = $html_sub->find('dl.tabs')[0]->find('dd.selected')[0]->find('div.tab-content')[0];
//$description = $html_sub->find('dl.tabs dd.selected div.tab-content')[0];
$description = htmlspecialchars($description->plaintext);
//echo "<HR>";
$table_of_goods = $html_sub->find('div#modal_table table.mod_t')[0]->children;
$table_header = $table_of_goods[0]->find('tr')[0];
$table_body = $table_of_goods[1]->children;
$numer = array();
//Вытягиваем номера ячеек с необходимыми нам столбцами
foreach (($table_header->children) as $num => $th_row) {
// echo "FIRST foreach<br>";
//var_dump($th_row->plaintext);
//var_dump($num);
switch(trim($th_row->plaintext)){
case 'Наименование':
// case 'Наименование светильника':
$numer["name"] = $num;
break;
case 'Фото':
case 'Изображение':
$numer['image'] = $num;
break;
case 'Артикул':
$numer['model'] = $num;
break;
}
}
if (!(isset($numer['image']))){
$numer['image'] = '-1';
$image_path = $html_sub->find('div.product_info div.image div img')[0]->src;
}
//echo "<hr>";
$rowspan = 1;
//Вытягиваем изображение и информацию из ячеек данных
foreach ($table_body as $table_line){
// echo "second foreach<br>";
//прогоняемся по всем элементам таблицы, вытаскиваем подкатегории 3 уровня и товары с их свойствами и картинками
//var_dump($table_line->plaintext);
$arr_of_tl = $table_line->children;
if($rowspan == 1){
$row_bool = 0;
}
else {
$row_bool = 1;
$rowspan--;
}
foreach ($arr_of_tl as $num => $value){
//Сопоставляем ячейку с заголовком
switch($num + $row_bool){
case $numer['image']: {
//Необходимо получить ячейку изображения и проверить его rowspan. записать его rowspan в отдельную переменную и если он не равен 1, то прибавлять +1 переменной num, чтобы
// не сбивался порядок ячеек в таблице при считывании данных.
if (isset($value->rowspan)) {
$rowspan = (int) $value->rowspan;
//var_dump($rowspan);
}
if (isset($value->find('img')[0])){
$image_path = $value->find('img')[0]->src;
}//;
//var_dump($image_path);
// $image = file_get_contents($image_path);
// file_put_contents($image["tmp_name"], $path_to_images);
//$image_addr = $path_to_images . $image;
}
break;
case $numer['model']: $article = $value->plaintext;
break;
case $numer['name']: $name = $value->plaintext;
break;
}
}
if(isset($article) && $article !== '' && $article !== ' ')
{
$arr = explode("/", $image_path);
$imagen = end(str_replace(" ","",$arr));
//file_put_contents(__DIR__ . _DS_ . "catalog" . _DS_ . $imagen, $this->link . $image_path);
file_put_contents( 'catalog\\' . $imagen, file_get_contents('http://tdme.ru' . $image_path));
//INSERT INTO base (name, image, description, article) VALUES ('6', '1st Street', 'Los Angeles', 'Harry Monroe')
//$parsed_string = 'UPDATE tdm_upload SET `name` = \'' . $name . '\' `image` = \'catalog/'. $article . '\' `description` = \''. $description . '\' WHERE `article` = \'' . $article . "'; \n";
$parsed_string = 'INSERT INTO base (image, description, article) VALUES (\'catalog\\'.$imagen.'\', \''. $description .'\', \''.$article."'); \n";
fwrite($sql_file, iconv("WINDOWS-1251", "UTF-8", "$parsed_string") );
}
}
$html_sub->clear();
unset($html_sub);
unset($table_of_goods);
//$description->clear();
//unset($description);
return 1;
}
public function insert_into_mysql() {
$this::Load(__DIR__ . '\shd\simple_html_dom.php');
$categories = new simple_html_dom();
$categories = $this->get_categories();
$subcat = $this->get_models($categories);
if(count($subcat)){
foreach ($subcat as $models){
sleep(1);
$this->get_price($models);
}}
var_dump(($subcat));
return 1;
}
public static function Load($pClassName){
if ((class_exists($pClassName,FALSE))) {
return FALSE;
}
if ((file_exists($pClassName) === FALSE) || (is_readable($pClassName) === FALSE)) {
// Can't load
return FALSE;
}
require_once($pClassName);
} // function Load()
}
$tdm_parse = new tdm_parse();
$tdm_parse->insert_into_mysql();
?>