Публичный парсер товаров по фильтрам с разных площадок, стек технологий?
Всем доброго времени суток!
Есть 3 портала с товарами, нужно сделать так, чтобы пользователь мог после регистрации создать свой фильтр (вес, цена, объем и т.д.) .
Задача в том, чтобы парсить для каждого пользователя каждую минуту товары по этим фильтрам и отсылать ссылку на НОВЫЙ товар.
В общем, суть в том, что у юзера может быть 60 фильтров (к примеру по 20 на каждый портал) и каждую минуту нужно спарсить эти 60 страниц на наличие нового товара (т.е. сделать 60 запросов).
А если таких юзверей будет хотябы 1000, то это получается каждую минуту по 60 000 запросов.
Проект должен быть на php. Кто писал парсеры, поделитесь пожалуйста опытом. Т.к. на данном этапе реализации всё работает, использую multicurl. Но как только задаю по 90+ фильтров и имитирую наличие 10-ти юзверей всё очень грустно становится.
Заранее спасибо :)
qxcoder @qxcoder
Я думал об этом, и при этом, проблема немного глубже. Мне нужны только актуальные товары с текущего времени.
Приведу полный пример.
Рассмотрим доску объявлений. Я хочу первый узнать о каком-либо товаре. Мне, к примеру, нужен acer aspire 5742g. Я выбираю ЦП, объем ОП, видюху и ценник. Как только появляется товар который подходит по моим фильтрам мне приходит смс. Т.е. объявления, которые были выложены ранее, мне не интересны. Таких фильтров может быть 50.
Алгоритм такой:
1. Бери фильтр, забирай страницу курлом.
2. Собирай ИД товаров .
3. Сравнивай их с уже имеющимися в БД.
3.1 Если есть ИД которого нет в базе - отправляй СМС и добавляй его в бд.
3.2 Иначе ничего не делай.
Проблема в том, что как только появляется N пользователей (для примера возьмем 100) и у каждого по 50 фильтров, то к этой доске объявлений по крону, каждую минуту, будет улетать по 5000 запросов (а если взять 1000 пользователей, то это вообще 50к =_=). От этого не избавишься, только если искать среди всех одинаковые фильтра и делать всего один запрос. Но это будут крупицы.
Ну и естественно сервер доски объявлений будет не рад такой активности... Купить Проксей? А сколько? Грубо говоря по 1-ой на юзера? Только такое решение?
Буду рад послушать ваши мысли на этот счет!
Я думал об этом, и при этом, проблема немного глубже. Мне нужны только актуальные товары с текущего времени.
Приведу полный пример.
Рассмотрим доску объявлений. Я хочу первый узнать о каком-либо товаре. Мне, к примеру, нужен acer aspire 5742g. Я выбираю ЦП, объем ОП, видюху и ценник. Как только появляется товар который подходит по моим фильтрам мне приходит смс. Т.е. объявления, которые были выложены ранее, мне не интересны. Таких фильтров может быть 50.
Алгоритм такой:
1. Бери фильтр, забирай страницу курлом.
2. Собирай ИД товаров .
3. Сравнивай их с уже имеющимися в БД.
3.1 Если есть ИД которого нет в базе - отправляй СМС и добавляй его в бд.
3.2 Иначе ничего не делай.
Проблема в том, что как только появляется N пользователей (для примера возьмем 100) и у каждого по 50 фильтров, то к этой доске объявлений по крону, каждую минуту, будет улетать по 5000 запросов (а если взять 1000 пользователей, то это вообще 50к =_=). От этого не избавишься, только если искать среди всех одинаковые фильтра и делать всего один запрос. Но это будут крупицы.
Ну и естественно сервер доски объявлений будет не рад такой активности... Купить Проксей? А сколько? Грубо говоря по 1-ой на юзера? Только такое решение?
Буду рад послушать ваши мысли на этот счет!
qxcoder: не нужно использовать фильтры на тех порталах, которые парсите. Просто парсите все подряд товары. Сохраняйте урл к каждому товару, 1-2 раза в сутки пробегайте кроном по всем урлам для проверки наличия товаров.