Очень простой C ++ веб-сканер / паук? - PullRequest
19 голосов
/ 25 ноября 2010

Я пытаюсь сделать очень простое приложение для поиска и пауков на C ++. Я искал Google для простого, чтобы понять концепцию. И я нашел это:

http://www.example -code.com / vcpp / spider.asp

Но для меня это немного сложно / трудно переварить.

То, что я пытаюсь сделать, это просто, например:

введите URL: www.example.com (я буду использовать bash-> wget, чтобы получить содержимое / исходный код)

затем будет искать, может быть, ссылку "href", а затем сохранять в каком-либо файле данных.

Какой-нибудь простой учебник или руководство для меня?

Я только начинаю изучать C ++ (1 месяц)

Ответы [ 2 ]

44 голосов
/ 25 ноября 2010

Хорошо, я постараюсь указать вам правильное направление.Концептуально, веб-сканер довольно прост.Он вращается вокруг структуры данных очереди FIFO, в которой хранятся ожидающие URL-адреса.C ++ имеет встроенную структуру очереди в стандартной библиотеке std::queue, которую можно использовать для хранения URL-адресов в виде строк.

Базовый алгоритм довольно прост:

  1. Начните с выбранного базового URL-адреса и поместите его в начало своей очереди
  2. Вставьте URL-адрес вверхнюю часть очереди и загрузите ее
  3. Разберите загруженный файл HTML и извлеките все ссылки
  4. Вставьте каждую извлеченную ссылку в очередь
  5. Перейдите к шагу 2 или остановитесь, как только выдостигнуть определенного предела

Теперь я сказал, что веб-сканер концептуально простой, но реализовать его не так просто.Как видно из приведенного выше алгоритма, вам понадобится: сетевая библиотека HTTP, позволяющая загружать URL-адреса, и хороший анализатор HTML, который позволит вам извлекать ссылки.Вы упомянули, что можете использовать wget для загрузки страниц.Это несколько упрощает ситуацию, но вам все равно нужно проанализировать загруженные документы HTML.Правильный разбор HTML - нетривиальная задача.Простой поиск по строке <a href= будет работать только иногда.Однако, если это просто игрушечная программа, которую вы используете для ознакомления с C ++, для ваших целей может быть достаточно простого поиска строк.В противном случае вам нужно использовать серьезную HTML-библиотеку.

При написании веб-сканера необходимо учитывать и другие факторы, такие как вежливость. Люди будут раздражены и, возможно, забанят ваш IP, если вы попытаетесь загрузить слишком много страниц,слишком быстро, с того же хоста.Таким образом, вам может потребоваться реализовать какую-то политику, при которой ваш веб-сканер ждет короткий период перед загрузкой каждого сайта.Вам также нужен какой-то механизм, чтобы избежать повторной загрузки того же URL-адреса, подчиняться протоколу исключения роботов , избегать ловушек для гусеничных устройств и т. Д. ... Все эти сведения складываются, чтобы сделать реализацию надежного веб-сканера не такой простой вещью.

Тем не менее, я согласен с Ларсманами в комментариях.Веб-сканер не лучший способ изучения C ++.Кроме того, C ++ - не лучший язык для написания веб-сканера. Необработанный и низкоуровневый доступ, который вы получаете в C ++, бесполезен при написании такой программы, как веб-сканер, который проводит большую часть своего времени в ожидании разрешения URL-адресов искачать.На мой взгляд, для этой задачи лучше подходит язык сценариев более высокого уровня, например Python или что-то еще.

4 голосов
/ 18 мая 2013

Проверьте этот веб-сканер и индексатор, написанный на C ++, по адресу: Mitza веб-сканер Код можно использовать в качестве справочного.Чист и обеспечивает хорошее начало для кодирования веб-сканера.Диаграммы последовательности можно найти на вышеуказанных ссылочных страницах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...