Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

Парсер прайса


 Поделиться

Рекомендованные сообщения

Добрый день, пытаюсь сделать парсер товаров. Вытягиваю из нужных мне тегов данные товара и записываю в бд. Возникла проблема с записью в БД - добавляется только одно поле. 

foreach ($res as $elkis) // в $res хранятся спарсенные данные
            {
            //echo "<br/>".$elkis['product_id']."-".$elkis['descript']."<br/>";
			$x = $elkis['product_id'];
            $name = $elkis['name'];
            $prices = $elkis['price'];
            //$descript = $elkis['descript'];
			$query = "INSERT INTO product (`model`, `price`, `status`, `quantity` ) VALUES ('$name', '$prices', '1', '99')";
            }
            
			mysql_query($query) or die(mysql_error());
			mysql_close();

Парсинг происходит с помощью Simple html dom. $elkis['product_id'] и $elkis['name'] это вытянутые данные. Через echo проверял - выводятся все товары как надо. Что я упускаю?

 

Ссылка на комментарий
Поделиться на других сайтах


Нашел ошибку: mysql_query($query) or die(mysql_error()); был за пределами цикла. 
Но возник неприятный баг - не добавляются русские символы. БД и файл скрипта в utf-8.
UPD: попробовал просто записать русские символы через переменную и просто в поле, все норм:

function SaveToDB($res, $sQuery)
		{
			/* Переменные для соединения с базой данных */
			$hostname = "localhost";
			$username = "root";
			$password = "12345678";
			$dbName = "parsing";
			
			/* создать соединение */
			mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");
			if (!mysql_select_db($dbName))
			{
				if (mysql_errno() == 1049)
				{		
					mysql_query("CREATE DATABASE ".$dbName." CHARACTER SET utf8 COLLATE utf8_general_ci;") or die(mysql_error());
					mysql_select_db($dbName);
				}
			}

			
			mysql_query("CREATE TABLE IF NOT EXISTS `parsinginfo` (
			`id` int(11) NOT NULL AUTO_INCREMENT,
			`textquery` varchar(255) NOT NULL,
			`data` varchar(255) NOT NULL,
			`date` varchar(255) NOT NULL,
			PRIMARY KEY (`id`))");
			
	    mysql_query("SET NAMES 'utf8'");
            foreach ($res as $elkis) 
            {
            $x = $elkis['product_id'];
            $name = $elkis['name'];
            $prices = $elkis['price'];
            $descript = $elkis['descript'];
            $data = "Мама мыла раму";   //эта запись норм добавляется в БД
            //echo "".$elkis['product_id']."-<b>".$elkis['name']."</b>-".$elkis['descript']."<br>";
			$query = "INSERT INTO parsinginfo (`title`, `product_id`, `price`, `description`, `data`, `date`) VALUES ('Мама', '$x', '$prices', '$descript', '$data', NOW())";
            mysql_query($query) or die(mysql_error());
            }
		}
Изменено пользователем xboltikxx
Ссылка на комментарий
Поделиться на других сайтах


А в базу вносить значения по $x = $elkis['product_id']; кто будет ?

попробуйте сделать по типу:

 

$query = "INSERT INTO product (`product_id`, `model`, `price`, `status`, `quantity` ) VALUES ('$x', '$name', '$prices', '1', '99')";

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах

Прошу прощения, неправильно вставил код, исправил выше.

 

 

Еще, если убрать mysql_query("SET NAMES 'utf8'");   то добавляются "кракозябры" . Вопрос остается открытым про кодировку.

 

UPD:

$descript = iconv("windows-1251", "utf-8", $descript); 

Это помогло. Если кто знает более элегантное решение, то буду очень благодарен.

Изменено пользователем xboltikxx
Ссылка на комментарий
Поделиться на других сайтах


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.