Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Братуха
5 / 5 / 5
Регистрация: 15.07.2012
Сообщений: 773
#1

Многопоточный парсер наилучшая структура и способ реализации - C++

16.03.2016, 09:37. Просмотров 488. Ответов 4
Метки нет (Все метки)

Добрый день я хочу написать парсер и перед началом хотелось бы спросить про структуру парсера.
Задача моего парсера парсить одновременно около 50 страничек с интервалов в 1-3 секунды каждая. Данные на этих страничках меняются очень часто. Смысл в том, что парсер должен найти мне нужную информацию и сравнить ее с информацией с других страничек и сделать вывод. Мне очень важна скорость работы.

Так вот первый мой вариант состоит в том, что мы загружаем одновременно все 50 страничек и сравниваем их с помощью функции и уже результат записываем в файл или в бд. Второй мы парсим по отдельности все 50 страничек с интервалом в 1-3 секунды и просто записываем результат в бд или файл, а уже потом другим кодом парсим бд или файл.

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

Второй вариант мне нравиться, что все странички загружаются отдельно и не зависят от других, но я боюсь за нагрузку на бд или файл ведь мы отправляем туда столько информации(с учетом фильтрации ненужных нам символов около 4000 символов с каждой странички), а потом же ее извлекаем для дальнейшей обработки, в принципе делаем двойную работу - получаем информацию из сети а потом еще и из бд или файла, что бы обработать

А что вообще будет лучше использовать бд или файл

В принципе нагрузка на сервер меня не беспокоит, мне в общем интересует наибольшая скорость от загрузки странички до получения конечного результата при условии что интернет и сервер позволяют.

Еще бы я хотел узнать насчет реализации, просто я лишь недавно начал знакомиться с этим языком до этого был php. Я уже немного полазил по интернету и нашел немного информации, как я понял самая большая проблема будет в извлечении информации, так как многие странички подгружают js. Я так понял, что получить это все можно через webbrowser в VS немного пробовал им пользоваться. Скажите чем вы пользуетесь и как для таких целей, есть ли возможность получать универсально html код с уже подгруженными данными, я имею ввиду не то что именно мне надо, а весь код а там из его извлекать информацию индивидуально для каждого сайта. Может есть библиотеки под эти нужды заточены как в php, может кто может подкинуть пример как получить контент подгруженный js. Буду рад любому ответу, надеюсь не нагрузил сильно

Добавлено через 18 часов 19 минут
Ау все умерли или я много написал?
http://www.cyberforum.ru/cpp-beginners/thread1510352.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2016, 09:37
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Многопоточный парсер наилучшая структура и способ реализации (C++):

Самый простой способ реализации двух параллельных потоков
Здравствуйте. Покажите самый простой способ реализовать два параллельных...

Есть ли более правильный и элегантный способ реализации функции?
Доброе время форумчане! bool db::CreateSQLTable() { QSqlQuery a; ...

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

Отделение интерфейса от реализации класса: компиляция кода реализации
Доброго времени суток, У меня возникла проблема с отделением интерфейса от...

Многопоточный парсер
Пытаюсь создать многопоточный парсер, но появилась проблема. Пытался сделать...

4
Renji
2127 / 1486 / 453
Регистрация: 05.06.2014
Сообщений: 4,326
16.03.2016, 10:53 #2
Лучший ответ Сообщение было отмечено Kastaneda как решение

Решение

Я бы для начала задался вопросом действительно ли узким местом будет парсер, а не загрузка страниц. Дальнейшие шаги:
1) Сделать функцию которая качает и разбирает одну страницу.
2) По очереди запустить 50 функций, замерять время работы.
3) Используя 50 std::thread, запустить 50 функций одновременно. Замерять время.
4) В зависимости от результатов, выбрать нужное решение.
Цитата Сообщение от Братуха Посмотреть сообщение
также и на время получения нужной информации ведь функция будет выполняться лишь тогда когда все 50 страничек загрузятся абсолютно полностью
В принципе, можно парсить по мере загрузки. Правда, придется откатываться на уровень сокетов, нормальной обертки для этого дела мне не попадалось. И да, curl не предлагать, у него загрузка работает в режиме "эй, у меня еще кусок странички", тогда как для парсера надо наоборот, "эй, дай мне еще кусок странички а я если его нет еще - я чуток покемарю".
Цитата Сообщение от Братуха Посмотреть сообщение
Скажите чем вы пользуетесь и как для таких целей
Перлом. Там нативная реализация регулярных выражений (без создания промежуточных regex объектов), так что выдиралки данных пишутся куда удобнее чем на плюсах.
1
Братуха
5 / 5 / 5
Регистрация: 15.07.2012
Сообщений: 773
16.03.2016, 12:16  [ТС] #3
Блин сколько людей столько мнений кто говорит на C кто-то перле, на php то же можно но врятли для моих целей подойдет
0
vndtta
90 / 67 / 21
Регистрация: 17.10.2011
Сообщений: 235
Завершенные тесты: 1
16.03.2016, 13:26 #4
Там нативная реализация регулярных выражений (без создания промежуточных regex объектов), так что выдиралки данных пишутся куда удобнее чем на плюсах.
так то ему и не нужны регулярные выражения, пусть пишет свою грамматику и словарь лексем, по идее проще должно быть
0
Братуха
5 / 5 / 5
Регистрация: 15.07.2012
Сообщений: 773
16.03.2016, 13:33  [ТС] #5
У меня конечно приоритет не на простоту написания а на скорость работы программы, не знаю это лично мое мнение но регулярки это как-то зло говорят. я бы и на php писал через Selenium PhantomJS там еще много информации насчет парсера php но все варианты заточены под такие задачи как грабить контент и многопоточность там не в почете, да и скорость храмает, решил писать на С не потому что так хочется а потому что надо
0
16.03.2016, 13:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2016, 13:33
Привет! Вот еще темы с решениями:

Многопоточный .csv парсер
Доброго времени суток) Суть вопроса думаю понятна из заголовка. файл .csv...

Многопоточный парсер по ftp
Есть удаленный сервер, куда есть коннект по ftp, требуется рекурсивно парсить...

Многопоточный HTML Парсер
Суть задачи состоит в том чтобы парсить html по ссылке на наличие email-ов, в...

Многопоточный парсер на Ruby и Watir
Собственно есть сайт, обычно с большим количеством страниц, в силу его...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru