2010-11-25 6 views
17

Я пытаюсь сделать очень простой веб-искатель/приложение-паук в C++. Я искал google для простого понимания концепции. И я нашел это:Очень простой Crawler Crawler/spider?

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

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

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

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

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

Любой простой учебник или рекомендации для меня?

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

+3

Сначала изучите C++ правильно, затем попытайтесь сделать что-то сложное, как искатель. – 2010-11-25 14:32:20

+3

Хм ... Даже простой гусениц? Не так сложно, как ларбин. Я думаю, при выполнении искателя поможет мне узнать много вещей на C++. Угадайте, мое мышление ошибочно – popurity09 2010-11-25 14:36:30

+0

рассмотрите использование https://github.com/Microsoft/cpprestsdk – Sergei 2017-04-11 13:09:16

ответ

40

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

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

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

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

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

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

4

Проверьте этот веб-искатель и указатель, написанный на C++ по адресу: Mitza web crawler Этот код может быть использован как ссылка. Является чистым и обеспечивает хороший старт для кодирования webcrawler . Схемы последовательности можно найти на приведенных выше страницах ссылок.

Смежные вопросы