@Andreda

На чем лучше реализовать многопоточный веб-скрейпер/парсер сайтов?

НА каком языке программирования и используя какие библиотеки\фреймворки можно написать многопоточный веб-скрейпер/парсер сайтов.

php, nodejs, go, C++ ....

Где по определенному запросу пользователя - необходимо параллельно спарсить со сторонних сайтов-магазинов товары по данному запросу - вглубь сайта не лезть, просто поверхностно на первой странице.

ТО есть пользователь вбивает "джинсы" - сервер запускает до 50 параллельных скриптов или функций, в каждом есть 1-5 http запросов (несколько запросов возможно из-за сложной авторизации на сайте, из-за ввода капчи и тд)/ и другая логика, уникальная для каждого сайта-донора.

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

Информация по ключам будет кэшироваться на некоторое время, но как правило нужно готовиться к высокой нагрузке, когда пользователи будут одновременно искать разные слова\фразы. джинсы,кофта,рубашка и тд.
И сервер, не находя информации в кэше - будет повторно парсить данные со сторонних сайтов в параллельных потоках. То есть и пользователи запрашивают одновременно 50 разных фраз, и серверу необходимо создать по N параллельных функций-парсеров со своей логикой
  • Вопрос задан
  • 1004 просмотра
Пригласить эксперта
Ответы на вопрос 6
mmmaaak
@mmmaaak
go + goquery
Ответ написан
Комментировать
puchkovk
@puchkovk
Усложнять — просто. Упрощать — сложно.
Выбор языка для подобной задачи сводится к выбору имеющихся готовых библиотек, которые нужно просто скомпоновать. Задача решалась уже сотни раз, ваять свои велосипеды нет смысла. В почти любом языке, применяемом массово для веб-разработки есть готовые библиотеки для решения подобных задач.

Ну и точно не на С++, будет долго, дорого и бессмысленно, это язык для других задач.

Можно еще посоветовать делать том языке, который лучше всего знаком/нравится тому, кто будет непосредственно это программировать. Или, если исполнитель не знает ни одного подходящего под задачу языка - на PHP, просто потому, что будет проще вникнуть.
Ответ написан
Комментировать
@Verz1Lka
Web scraping expert
python + scrapy.org
Ответ написан
Комментировать
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
я бы делал не параллельный, а асинхронный и писал бы на python, а информацию сохранял бы в какой-нибудь базе данных, возможно postgres.
Ответ написан
Комментировать
Для этого Go подойдёт. Одновременно 50 потоков это очень мало для него. Всё в один канал шлите и отдавайте.
Ответ написан
Комментировать
Revencu
@Revencu
Python: Multithreading + Requests + LXML
Больше RAM - больше Threads
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы