Какие есть библиотеки для работы с сетью?

Существует ли какие-нибудь библиотеки для C++, через которые возможен парсинг веб-страниц и загрузка этой информации в файлы либо в БД?

Если да, то будут ли они быстрее работать обычного file_get_contents в php?

P.S. Библиотека необходима для загрузки большого числа страниц (около 5 млн.) и сохранения информации с них.

  • Вопрос задан
  • 3547 просмотров
Пригласить эксперта
Ответы на вопрос 4
EugeneOZ
@EugeneOZ

99% времени уйдёт на скачивание контента (5000000 страниц это не хухры мухры). Тут хоть на бейсике писать можно. Ну, конечно, C++ будет быстрее, но в абсолютных величинах, по итогам выполнения этой задачи, это вряд ли будет заметно.

Ответ написан
Комментировать
afiskon
@afiskon

Мне кажется, вашу задачу лучше на Perl решать или на Python, но никак не на C++.

Ответ написан
Комментировать
alekciy
@alekciy
Вёбных дел мастер

Я использую MultiCurl. Запускаю 100 загрузок, через bash запускается 20 копий скрипта (IPC реализовано через очередь в Redis). 18кссылок отрабатывает за 10 минут (около 30 в секунду). Но скрипт не просто качает, он проводит анализ страницы, перекодирует в требуемую кодировку, строит DOM страницы и через XPath вытягивает нужные данные. При этом каждая копия жрет где-то 50МБ. Схема простая и легко масштабируемая горизонтально.

Кстати, нужно понимать/разделять процесс скачки страницы и её парсинг. Первое может легко и непринужденно делать wget.

Сишные либы дадут в принципе один плюс - экономию ОЗУ (т.е. nelis заблуждается). В остальном больше времени уйдет на взаимодействие с сетью и записи данных в базу.

file_get_contents без задания контекстов использовать категорически нельзя. Ибо 1) это блокируемая функция, 2) не содержит таймаутов.

Ответ написан
Комментировать

Не скажу про существующие библиотеки, так как на C++ не писал ничего. Но, работа это будет быстрее чем на PHP (тем более, с учетом того объема, что Вы указали) - точно, хотя бы потому что PHP это интерпретируемый язык.

Ответ написан
Комментировать
Ваш ответ на вопрос

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

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