2012-06-30 3 views
0

Я экспериментирую и пытаюсь сделать минимальный веб-искатель. Я понимаю весь процесс на очень высоком уровне. Итак, попав в следующий уровень деталей, как программа «подключается» к различным веб-сайтам для извлечения HTML?C++ web crawler

Я использую Sockets для подключения к серверам и отправки HTTP-запросов? Могу ли я давать команды терминалу для запуска telnet или ssh?

Кроме того, является ли C++ хорошим языком для веб-искателя?

Спасибо!

+1

Вы можете сделать это с C++, конечно, но я хотел бы предложить язык сценариев будет гораздо проще - я C++ кодер, но я бы никогда не использовал его для такого приложения, но я много сделал с помощью Perl. – mathematician1975

+0

Также, если бы вы искали этот сайт, вы бы нашли это, что может помочь http://stackoverflow.com/questions/4278024/a-very-simple-c-web-crawler-spider – mathematician1975

+0

@ mathematician1975: +1 для Perl. И Lua может быть хорошей альтернативой. – Jack

ответ

0

Короткий ответ, нет. Я предпочитаю кодирование в C++, но этот экземпляр требует Java-приложения. API имеет много парсеров html и встроенных протоколов сокетов. Этот проект станет болью на C++. Я закодировал один раз в java, и это было несколько блаженно.

Кстати, есть много поисковых систем там, но я предполагаю, что у вас есть пользовательские потребности :-)

+0

Спасибо, я продолжаю Java – CodeKingPlusPlus

2

Кроме того, является ли C++ хорошим языком для веб-искателя?

Зависит. Насколько хороши вы на C++.
C++ - хороший язык для написания расширенного высокоскоростного искателя в силу его скорости (и вам нужно, чтобы обрабатывать HTML-страницы). Но это не самый простой язык для написания сканера с таким, вероятно, не лучшим выбором, если вы экспериментируете.

Основываясь на вашем вопросе, у вас нет опыта написания расширенного искателя, поэтому, вероятно, вы хотите создать простой последовательный гусеничный движок. Поскольку эта скорость не является приоритетом, поскольку узким местом является загрузка страницы по сети (а не обработка страницы). Поэтому я бы выбрал другой язык (возможно, python).

+0

Я не согласен. Ответ просто __no__. Вы ни в коем случае не заблокированы процессором, если только вы не выполняете необычную работу на каждой странице - загрузка страниц занимает намного больше времени. И даже в этом случае искатель должен быть написан на языке более высокого уровня, а части, требующие производительности, можно портировать на такой язык, как C++. – orlp

+1

@ nightcracker: Мы связаны с ЦП, поскольку мы одновременно загружаем 2000 HTML-страниц (у нас есть серьезный искатель). http://devblog.seomoz.org/2012/06/how-does-seomoz-crawl-the-web/ Мы просто не можем позволить себе медлительность решений на основе скриптовых языков для поддержки соединений. (PS мы его протестировали). –

+0

Я бы никогда не догадался. Я предполагаю, что вы не используете модель с одним потоком за соединение (и в этом случае вы действительно быстро привязываетесь к процессору)? Кроме того, если загрузка страницы занимает 0,5 секунды, деленная на 2000, это означает, что у вас есть 0,25 мс на страницу, чтобы выполнить обход. Являются ли сокеты такими медленными? – orlp

0

Если вы планируете придерживаться C++, вам следует рассмотреть возможность использования библиотеки libcurl вместо того, чтобы использовать протокол HTTP с нуля с помощью сокетов. Для этой библиотеки доступно C++ bindings.

С веб-страницы загнутого уголка:

Libcurl является бесплатной и простой в использовании на стороне клиента библиотека передачи URL, поддержки DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS , LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet и TFTP. libcurl поддерживает SSL-сертификаты, HTTP POST, HTTP PUT, FTP Загрузка, загрузка на основе форм HTTP, прокси, куки, пользователь + пароль аутентификация (Basic, Digest, NTLM, Negotiate, Kerberos), файл перевод резюме, http прокси-туннелирование и Больше!

Libcurl очень портативный, он строит и работает одинаково на многочисленных платформах, включая Solaris, NetBSD, FreeBSD, OpenBSD, Дарвин, HPUX, IRIX, AIX, Tru64, Linux, UnixWare, HURD, Windows, Amiga, OS/2, BeOS, Mac OS X, Ultrix, QNX, OpenVMS, RISC OS, Novell NetWare, DOS и многое другое ...

Libcurl бесплатно, поточно-совместимость с IPv6, многофункциональная, хорошо поддерживается , быстро, тщательно документирована и уже используется многими известными крупными и успешными компаниями и многочисленными приложениями.