Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
 
Kastaneda
Jesus loves me
Эксперт С++
4701 / 2905 / 239
Регистрация: 12.12.2009
Сообщений: 7,399
Записей в блоге: 2
Завершенные тесты: 1
#1

Реальная задача для реального проекта для желающих покодить - C++

19.07.2016, 19:54. Просмотров 850. Ответов 24
Метки нет (Все метки)

Привет

Попросили сделать парсер сайта по-дружески, но у меня реально времени на него нет. Если кому-то интересно, могу двигать в нужном направлении и может, при желании, могу пинать за плохой код.
Что нужно сделать - парсер с HTTP клиентом. Пример клиента на boost::asio скину, покажу как парсить HTML регулярками (да, есть библиотеки, но думаю руками будет интересней). Могу архитектуру накидать еще.

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

Тему не помещаю во фриланс, т.к. денег не предвидится, но вообще, могу уточнить, может там какая-то чисто символическая сумма будет.

Да, знаю С++ тут не лучший выбор, но тут большая активность желающих обучаться людей.
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.07.2016, 19:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Реальная задача для реального проекта для желающих покодить (C++):

Тема для дипломного проекта - C++
Доброго времени суток! Пришло время писать диплом. Я не прошу конкретно назвать мне тему, достаточно хотя бы подтолкнуть в каком-нибудь...

Компиляция С++ проекта для КПК - C++
Всем привет! Решил тут одну полезную программку скомпилить для покета. У меня стоит VS2003 и когда-то я еще на VB создавал проект...

Отдельная папка для проекта - C++ Builder
Юзаю Rad Studio XE3. Назрел такой вопрос: можно ли как-то поместить проект в отдельную папку? А то все в Projects перемешивается и очень...

Смена иконки для проекта - C++ Builder
Ребят, знаю, что вроде как можно поставить иконку таким образом: Но иконка ставится только почему-то в мелком просмотре, если же...

Создание шаблона для проекта - C++ Builder
есть билдер, открываю FILE-OTHER. Вылазит список различных проектов которые могу создать(cpp фаил, хидер и тд и тп). Мне надо как то свой...

График реального времени для данных, поступающих из СОМ-порта (MFC) - Visual C++
Добрый день всем! Какое-то время назад Maxi Paul поднимал подобную тему, но она, к сожалению, осталась без ответа. Нужно построить в...

24
casper007
67 / 67 / 22
Регистрация: 12.12.2013
Сообщений: 402
21.07.2016, 22:11 #2
Можно мне попробовать? Очень хочу научиться работать в данном направлении.
0
ProgRoman
1 / 1 / 0
Регистрация: 04.12.2010
Сообщений: 67
22.07.2016, 10:46 #3
Добрый день! Тоже хотел бы научиться работать в этом направлении!
0
Kastaneda
Jesus loves me
Эксперт С++
4701 / 2905 / 239
Регистрация: 12.12.2009
Сообщений: 7,399
Записей в блоге: 2
Завершенные тесты: 1
22.07.2016, 13:43  [ТС] #4
casper007, ProgRoman, привет, я подумаю как можно разделить задачи, пока по работе большой загруз, не могу отвлечься.
0
SatanaXIII
Супер-модератор
Эксперт С++
5649 / 2693 / 252
Регистрация: 01.11.2011
Сообщений: 6,588
Завершенные тесты: 1
26.07.2016, 11:48 #5
Цитата Сообщение от Kastaneda Посмотреть сообщение
я подумаю как можно разделить задачи
Ну выдать тз на маленькие конкретные функции. Типа: принимает такую-то строку, выдает такой-то объект.
0
Avazart
Эксперт С++
7432 / 5471 / 310
Регистрация: 10.12.2010
Сообщений: 24,382
Записей в блоге: 17
26.07.2016, 16:51 #6
Цитата Сообщение от Kastaneda Посмотреть сообщение
Пример клиента на boost::asio скину, покажу как парсить HTML регулярками
Я бы так так не делал, это затратно по времени и морока.
boost::asio - все же плохо подходит для HTTP, да и парсинг регулярками не всегда подходит.
Обычно я использую C++Builder для этого или Qt, там все таки гуи и потоки есть и библиотеки для http.
Ну и если уж без фреймворков то все таки есть другие либы типа curl или Poco.

Цитата Сообщение от Kastaneda Посмотреть сообщение
Есть сайт, там есть форма, в форму вводятся данные, данные для следующих листбоксов тянутся аджаксом, после заполнения всех форм аджаксом тянутся другие данные. Нужно стянуть данные для всех возможных комбинаций всех листбоксов, при этом нужно сохранить сами листбоксы.
Больше походит не на "научится" а на "рутину" которую самому лень делать
0
Kastaneda
Jesus loves me
Эксперт С++
4701 / 2905 / 239
Регистрация: 12.12.2009
Сообщений: 7,399
Записей в блоге: 2
Завершенные тесты: 1
26.07.2016, 16:52  [ТС] #7

Не по теме:

Avazart, согласен, просто это мой повседневный инструментарий, да и не настолько это и затратно по времени, для того, тобы получить тело HTTP ответа достаточно скопипастить готовый пример с бустовских примеров.


2all, блин, совсем нет времени, выходные пробухал был занят, в будни даже 10 минут выделить не могу. Вот если бы кто-то захотел себя попробовать в роли раздающего задачи, я б суть за пару минут в личку объяснил...

Добавлено через 1 минуту
Цитата Сообщение от Avazart Посмотреть сообщение
Больше походит не на "научится" а на "рутину" которую самому лень делать
да не, тут просто попросили как "тыжпрограммиста". У человека реальный проект, но он такие вещи не кодит. И да, какие-то деньги все таки будут, сумму пока не знаю.
0
Avazart
Эксперт С++
7432 / 5471 / 310
Регистрация: 10.12.2010
Сообщений: 24,382
Записей в блоге: 17
26.07.2016, 16:54 #8
Цитата Сообщение от Kastaneda Посмотреть сообщение
не настолько это и затратно по времени, для того, тобы получить тело HTTP ответа достаточно скопипастить готовый пример с бустовских примеров.
Это совсем не так. Задача будет сводится к написанию класса клиента для реализации HTTP протокола на основе буст-сокетов(долгое и нудное чтение RFC), а потом только сама задача ... а на кой оно надо?
0
Kastaneda
Jesus loves me
Эксперт С++
4701 / 2905 / 239
Регистрация: 12.12.2009
Сообщений: 7,399
Записей в блоге: 2
Завершенные тесты: 1
26.07.2016, 16:56  [ТС] #9
Цитата Сообщение от Avazart Посмотреть сообщение
Задача будет сводится к написанию класса клиента для реализации HTTP протокола (долгое нужное чтение RFC), а потом только сама задача
Не, на столько крутой клиент тут не нужен. Тут просто игнорируешь все HTTP заголовки и читаешь контент в строку. Заранее известно, что код ответа будет 200, поэтому даже редиректы и пр. обрабатывать не надо.
0
Avazart
Эксперт С++
7432 / 5471 / 310
Регистрация: 10.12.2010
Сообщений: 24,382
Записей в блоге: 17
26.07.2016, 17:01 #10
Цитата Сообщение от Kastaneda Посмотреть сообщение
Не, на столько крутой клиент тут не нужен. Тут просто игнорируешь все HTTP заголовки и читаешь контент в строку. Заранее известно, что код ответа будет 200, поэтому даже редиректы и пр. обрабатывать не надо.
Редерикты самая малая проблема. Банальная проблема с которой сталкиваешься каков размер пришедших данных? Т.е конец ответа....Или отправить POST или отправить POST multipart, SSL, энкодирование итп...

Можно делать влоб "без крутости" но это нифига не модифицируемо а учитывая что сайты меняют html- код страниц в лучшем случае каждый год-полгода - не дальновидно, потом фиг разберешься.
0
Kastaneda
Jesus loves me
Эксперт С++
4701 / 2905 / 239
Регистрация: 12.12.2009
Сообщений: 7,399
Записей в блоге: 2
Завершенные тесты: 1
26.07.2016, 17:10  [ТС] #11
Цитата Сообщение от Avazart Посмотреть сообщение
Редерикты самая малая проблема. Банальная проблема с которой сталкиваешься каков размер пришедших данных? Т.е конец ответа....Или отправить POST или отправить POST multipart, SSL, энкодирование итп...
не, там все гораздо проще - простой GET, в header добавляешь Connection:close и конец данных определяется тупо по EOF.

Цитата Сообщение от Avazart Посмотреть сообщение
Можно делать влоб "без крутости" но это нифига не модифицируемо а учитывая что сайты меняют html- код страниц в лучшем случае каждый год-полгода - не дальновидно, потом фиг разберешься.
Тут просто регулярки нужно будет поправить и все. Т.е. всё будет заточено под один конкретный сайт, делать мега универсальный скрапер необходимости пока точно нет.
0
Avazart
Эксперт С++
7432 / 5471 / 310
Регистрация: 10.12.2010
Сообщений: 24,382
Записей в блоге: 17
26.07.2016, 21:42 #12
Цитата Сообщение от Kastaneda Посмотреть сообщение
не, там все гораздо проще - простой GET, в header добавляешь Connection:close и конец данных определяется тупо по EOF.
Который сайт может смело проигнорировать, некоторые сайты вообще только с сжатом состоянии контент высылают.
Да и как бы это все костыли, и изначально это то "как не надо делать".

Добавлено через 8 минут
Цитата Сообщение от Kastaneda Посмотреть сообщение
У человека реальный проект, но он такие вещи не кодит.
Так что странно тянуть такое в реальный проект.
Цитата Сообщение от Kastaneda Посмотреть сообщение
могу пинать за плохой код.
Так что кого тут пинать...
0
Kastaneda
Jesus loves me
Эксперт С++
4701 / 2905 / 239
Регистрация: 12.12.2009
Сообщений: 7,399
Записей в блоге: 2
Завершенные тесты: 1
26.07.2016, 22:26  [ТС] #13
Цитата Сообщение от Avazart Посмотреть сообщение
Так что странно тянуть такое в реальный проект.
А что странного? Когда будет сайт возвращать, допустим, gzip, тогда и надо клиента расширять, сейчас есть сайт, который возвращает заранее известный ответ (чистый HTML с кодом 200), вот с этим ответом и надо работать. Писать расширяемый скрапер никто не просил.
Тут тот самый случай, когда нужно исходить из реальной задачи, а не проектировать расширяемую систему.
0
Avazart
Эксперт С++
7432 / 5471 / 310
Регистрация: 10.12.2010
Сообщений: 24,382
Записей в блоге: 17
26.07.2016, 22:31 #14
Цитата Сообщение от Kastaneda Посмотреть сообщение
А что странного? Когда будет сайт возвращать, допустим, gzip, тогда и надо клиента расширять, сейчас есть сайт, который возвращает заранее известный ответ (чистый HTML с кодом 200), вот с этим ответом и надо работать. Писать расширяемый скрапер никто не просил.
Тут тот самый случай, когда нужно исходить из реальной задачи, а не проектировать расширяемую систему.
В том то и дело что проектировать ничего не нужно, нужно просто использовать предназначенную для этого библиотеку, что с экономит время сейчас и в будущем.
0
Kastaneda
Jesus loves me
Эксперт С++
4701 / 2905 / 239
Регистрация: 12.12.2009
Сообщений: 7,399
Записей в блоге: 2
Завершенные тесты: 1
26.07.2016, 22:41  [ТС] #15
Цитата Сообщение от Avazart Посмотреть сообщение
нужно просто использовать предназначенную для этого библиотеку, что с экономит время сейчас и в будущем.
Я понимаю о чем ты говоришь, но реально нет необходимости. Встроить бустовкий HTTP клиент - это ctrl+C, ctrl+V. Буст уже прикручен, никаких доп. телодвижений не надо.

Добавлено через 1 минуту

Не по теме:

хотя у меня в проекте (как раз, где нужна готовая либа) все HTTP дела на boost::asio, но тут прихоть заказчика, не нужно ему ничего другого. Я к boost::asio уже привык, кучу своих велосипедов для HTTP уже написал

0
26.07.2016, 22:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2016, 22:41
Привет! Вот еще темы с ответами:

Подбор частот для пяти фильтров для обработки реального и идеального сигналов - Scilab
Привет всем! Имеется код программы для обработки реального и идеального сигналов. clear load("ideal2.dat") Si=s s= ...

Java на практике для всех желающих - Java
Доброго время суток, форумчане! Я начинающий Java разработчик. Проводя на форуме довольно много времени, начал замечать, что часто...

Список вопросов по C++ для желающих проверить свои знания C++ - C++
Я пишу книгу "Сборник тестовых вопросов и задач на знание C++ и умение его применять для решения конкретных задач.". Предлагаю Вашему...

Бесплатный доступ в Интернет для всех желающих может стать реальностью. - Безопасность
Несмотря на то, что вы прямо сейчас читаете это с экрана вашего компьютера и, быстрее всего, имеете iPhone или другой смартфон, позволяющий...


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

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

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