Зенка, парсинг, базы и их обработка

kopc

Client
Регистрация
24.11.2011
Сообщения
146
Благодарностей
56
Баллы
28
Приветствую.

Нужна помощь с реализацией одной задачи

Задача в следующем.
Есть несколько сайтов с предметами и ценами на них. Наличие предметов постоянно меняется, цена меняется не так часто от пары раз в день до раз в пару часов. Но проблема в том, что в каждый конкретный момент на сайте могут находится абсолютно разные предметы.
Все предметы на всех сайтах называются одинаково, либо незначительно отличаются.

Задача следующая.
Парсить все сайты одновременно собирая базу данных предметов. Скорее всего будет по 1му шабу на каждый сайт.

Потом будет выделен отдельный шаб, который будет обрабатывать информацию по базе и искать несоответствия в ценах.

Собственно задача в следующем.
1. Как лучше сделать обработку данных? Дело в том, что наименований предметов действительно много около 3-4 тысяч. Если цена изменилась, то нужно удалить старую цену в базе и записать новую. Но перебирать по 1му предмету долго. Может есть какой-то снипет, который справится с этой задачей быстрее, чем построчный перебор в зенке?

2. Собственно база и разница в цене предметов нужна для работы другого шаба, который будет нажимать по этим предметам в выдаче. Что лучше использовать для самой базы? Стоит ли прикупить хостинг и использовать MySQL или хватит обычного текстового/экселевского файла?

Может у кого-то был опыт решения подобных задач? Подскажите что-нить дельное
 

deopl

Client
Регистрация
06.12.2011
Сообщения
656
Благодарностей
126
Баллы
43
Делай через гет пост
Будет в разы быстрее
 

VerBin

Client
Регистрация
28.05.2016
Сообщения
555
Благодарностей
455
Баллы
63
Используй для примера MySQL, поиск и изменение данных будет в разы быстрее, чем на файлах.

Создай таблицу со следующими полями:
id - уникальный идентификатор записи
shop - ссылка или название магазина с которого взят товар (пример: shop.test.com)
name - название товара
price - цена
timestamp - временная метка, когда запись была добавлена или изменена

Затем уже составить запросы на добавления записей, редактирование в зависимости от условий поиска.

Разработку проекта нужно начинать с проектирования.
 

kopc

Client
Регистрация
24.11.2011
Сообщения
146
Благодарностей
56
Баллы
28
Делай через гет пост
Будет в разы быстрее
Все будет и так реализовано на гет запросах

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

Создай таблицу со следующими полями:
id - уникальный идентификатор записи
shop - ссылка или название магазина с которого взят товар (пример: shop.test.com)
name - название товара
price - цена
timestamp - временная метка, когда запись была добавлена или изменена

Затем уже составить запросы на добавления записей, редактирование в зависимости от условий поиска.
А не могли бы вы подсказать как лучше реализовать замену цены на определенном предмете.

Предположим в базе есть
предмет 1 цена 100
предмет 2 цена 200
предмет 3 цена 40

В результате парсинга
предмет 1 цена 100
предмет 2 цена 150
предмет 4 цена 20

Вот как мне лучше сделать, чтобы шла проверка и замена цен. У меня в этом основная проблема. Перебирать по строчно очень долго получается. Т.е. нашел предмет 1 - не трогает цену, нашел предмет 2 - заменил цену, не нашел предмет 4 - записал предмет 4 и цену.
Как лучше обработку всего этого сделать?
 

VerBin

Client
Регистрация
28.05.2016
Сообщения
555
Благодарностей
455
Баллы
63
Парсишь определенный магазин к примеру supershop.com, нашел товар Стул с ценой 100.
Делаешь SQL запрос к своей базе данных по двум полям: название магазина и название товара.
Если товар найден, проверяешь поле Цена, если совпадают значения, не трогаешь, если не совпадают, заменяешь цену в таблице.
Если товар не найден, добавляешь его в базу.

Также если товар существует и при парсинге и в базе, желательно обновить timestamp, или создать какое-нибудь поле целочисленное в которое будет добавляться единица при каждом парсинге. Чтобы после парсинга в базе можно было найти товары, которые не были найдены при парсинге и к примеру удалить их.
 

kopc

Client
Регистрация
24.11.2011
Сообщения
146
Благодарностей
56
Баллы
28
Парсишь определенный магазин к примеру supershop.com, нашел товар Стул с ценой 100.
Делаешь SQL запрос к своей базе данных по двум полям: название магазина и название товара.
Если товар найден, проверяешь поле Цена, если совпадают значения, не трогаешь, если не совпадают, заменяешь цену в таблице.
Если товар не найден, добавляешь его в базу.

Также если товар существует и при парсинге и в базе, желательно обновить timestamp, или создать какое-нибудь поле целочисленное в которое будет добавляться единица при каждом парсинге. Чтобы после парсинга в базе можно было найти товары, которые не были найдены при парсинге и к примеру удалить их.
Спасибо за советы, конечно, но у меня как раз проблема с проверкой наличия в базе.
Результат парсинга дает сразу от 300 до 1к значений названий и цен соответственно. Делать перебор по одному названию долго немного. Может есть какой-то вариант, который позволит выбирать сразу все спаршенные значения сразу и сразу по всем ценам проходится.

Т.е. нашел стул, стол, кровать. Можно ли как-то сразу по всем этим параметрам прочекать и изменить цены или мне при все равно придется брать и проверять отдельно стул, отдельно стол и так далее?
 

VerBin

Client
Регистрация
28.05.2016
Сообщения
555
Благодарностей
455
Баллы
63
Да тебе на каждый товар нужно выполнить по 1 запросу к базе данных, это только поиск.
Обновление цены это еще 1 запрос.
Но не переживай, запросы к БД обрабатываются быстро, если проиндексировать поля, по которым осуществляется поиск.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 805
Благодарностей
1 266
Баллы
113

VerBin

Client
Регистрация
28.05.2016
Сообщения
555
Благодарностей
455
Баллы
63
Это как? Ну стип бай стип как это сделать можете пояснить?
Прочитайте любой мануал для новичков по СУБД, к примеру по MySQL
Нужно просто создать индексы для определенных полей, по которым будет производится поиск.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)