Алгоритм записы в базу спарсенного контента

12 3
OI
На сайте с 05.03.2011
Offline
109
2463

Привет коллеги. Изучаю парсинг, никак не могу понять алгоритм записи информации в базу.

Пример.

Есть сайт, там товары. Которые имеют цену, артикул, название.

Так вот я получаю данные (все цены) и записываю их в переменную $cena.

В итоге в этой переменной содержатся все цены с товаров с сайта.

Как их мне записать в базу по отдельности, чтобы каждому товару соответствовала своя цена?

Я что должен, каждой цене присвоить свою переменную и отдельно записывать ее в базу?

Потом, остаются артикулы и названия. Их тоже отдельно нужно записывать?

melkozaur
На сайте с 06.04.2010
Offline
505
#1

ORIGAMMI,

Ну вот например Datacol работает таким образом, что отмечаются все нужные поля/заголовки товара, а потом он парсит сайт и составляет таблицу, т.е. одна строка в таблице - это один товар. Потом эту таблицу можно как угодно отредактировать для импорта в различные движки.

Серверы в NL/US со скидкой 30% нашим читателям: E5-2650v4/10GB DDR4/240GB SSD/1 Gbps - от $20: https://ua-hosting.company/vps/nl SEO без компромиссов: https://seoleaks.net SEOLEAKS - продвижение сайтов: https://www.instagram.com/seoleaks
OI
На сайте с 05.03.2011
Offline
109
#2

Datacol не подайдет, суть в том чтоб сделать парсер, который по крону будет записывать в базу цены и выводить их на сайте.

Z0
На сайте с 03.09.2009
Offline
759
#3

Создайте таблицу mysql. Туда и пишите через php по крону. Делов то...

mysql_query("INSERT INTO tovar SET price='$price', name='$name', value_1='$value_1', value_n='$value_n'");
OI
На сайте с 05.03.2011
Offline
109
#4

Делов для профи нет, а для меня еще все сложно.

Вот есть такой код, не совсем понимаю что он делает. Хочу переработать его.


require ('simple_html_dom.php');

$dbn = mysql_connect('localhost', 'user', 'password');
mysql_select_db('parser', $dbn);
mysql_query('SET NAMES utf8');

$brands = array();

$html = str_get_html(file_get_contents('http://url.kz'));
$insert = 'INSERT INTO kolesa_brands (id, name) VALUES ';
$select = $html->find('select[id=auto.car.mm_0]', 0);
foreach($select->find('option') as $opt)
{
if($opt->value == '') continue;
$insert .= '('.$opt->value.', \''.$opt->plaintext.'\'),';
$brands[$opt->value] = $opt->plaintext;
}
mysql_query(rtrim($insert, ','));

т.е я так понимаю что я ищу место 'option' и присваиваю переменной $opt,,

далее если $opt имеет значение, то продолжаю. А вот это место не понимаю.


$insert .= '('.$opt->value.', \''.$opt->plaintext.'\'),';
$brands[$opt->value] = $opt->plaintext;
}
B
На сайте с 13.02.2008
Offline
262
#5

В вашем примере парсится из выпадающего списка (тэг SELECT) список брэндов автомобилей и непустые значения записываются в базу. Это брэнды, не товары.

ZT
На сайте с 24.07.2012
Offline
39
#6
ziliboba0213:
Создайте таблицу mysql. Туда и пишите через php по крону. Делов то...
mysql_query("INSERT INTO tovar SET price='$price', name='$name', value_1='$value_1', value_n='$value_n'");

пздц! мы в 2005 вернулись?

т.е я так понимаю что я ищу место 'option' и присваиваю переменной $opt,,
далее если $opt имеет значение, то продолжаю. А вот это место не понимаю.

$insert .= '('.$opt->value.', \''.$opt->plaintext.'\'),';
$brands[$opt->value] = $opt->plaintext;
}

Это не самый лучший приме. В данном месте к SQL-запросу добавляются значения для вставки в базу. И заполняется массив $brands, который в данном примере (или в приведённой чего части) не используется.

Z0
На сайте с 03.09.2009
Offline
759
#7
Zloy_Tip:
пздц! мы в 2005 вернулись?

В 2017 в базу пишут как то особенно? :)

ZT
На сайте с 24.07.2012
Offline
39
#8
ziliboba0213:
В 2017 в базу пишут как то особенно? :)

Не то, чтобы особенно, но так советовать не стоит ;)


$db = new Mysqli('localhost', 'user', 'pass', 'db');
$query = $db->prepare('INSERT INTO tovar SET price=?, name=?, value_1=?, value_n=?');
$query->bind_param('iss', $price, $value_1, $value_n);
$query->execute();
OI
На сайте с 05.03.2011
Offline
109
#9

Давайте разберем на конкретном примере.

На странице есть таблица там стоят цены.


<td class="cost ttip">
6,89
</td>

Мне их нужно все спарсить и аккуранто записать в базу.


<?php
//подгружаем библиотеку
require 'simple_html_dom.php';
//подключаем базу
$dbn = mysql_connect('localhost', 'user', 'password');
mysql_select_db('parser', $dbn);
mysql_query('SET NAMES utf8');
//создаём новый объект
$html = new simple_html_dom();
//загружаем в него данные
$html = file_get_html('http://site.ru');
//Ищем все <td> в <table> где class = cost ttip
$es = $html->find('table.cost ttip td');
{
if($es->value == '') continue;
$insert .= '('.$es->value.', \''.$es->plaintext.'\'),';

}
//записываем в базу
$query = $db->prepare('INSERT INTO tovar SET price=$es');
//освобождаем ресурсы
$html->clear();
unset($html);
?>



---------- Добавлено 30.04.2017 в 23:17 ----------

Почему не работает ?

S
На сайте с 23.05.2004
Offline
316
#10

http://redbeanphp.com/index.php- для парсеров самое то, гнать в базу в любой модели.


R::setup( 'mysql:host=localhost;dbname=mydatabase', 'user', 'password' );
$x = R::dispense( 'tovar' );
$x->price = $es;
R::store( $x );
Это просто подпись.
12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий