Языковые рекомендации для эффективного веб-сканера - PullRequest
2 голосов
/ 03 декабря 2010

Я ищу язык для написания эффективного веб-сканера. Вещи, которые я ценю:

  • выразительный язык (не заставляйте меня просто через статические обручи)
  • полезных библиотек (html-парсер на основе селектора css был бы неплох)
  • минимальный объем памяти
  • надежная среда выполнения и библиотеки

Я попробовал node.js. Мне нравится узел в теории. Javascript очень выразительный. Вы можете использовать jQuery для разбора HTML. Асинхронная природа узла позволяет мне сканировать много URL параллельно, не имея дело с потоками. V8 хорош и быстр для разбора.

На практике, узел не работает для меня. Мой процесс постоянно падает. Ошибки шины, исключения в менеджере событий ... и т. Д.

Я сделал довольно много для Ruby dev, так что я не возражаю против использования сопрограмм Ruby 1.9 (волокон?), Если не столкнусь с подобными проблемами со стабильностью VM / библиотеки.

Дополнительные предложения?

Ответы [ 4 ]

6 голосов
/ 03 декабря 2010

Используйте Node.js и исправьте все, что его сбивает. Он работает на моем Ubuntu-боксе без проблем уже несколько месяцев.

Для библиотеки я рекомендую использовать YUI3 вместо jQuery, она легко позволяет создать веб-сканер / скребок за пару минут, если вы не верите мне, посмотрите этот разговор с YUIConf2010, это 40 минут, но все дело в коде.

Дэв Гласс (David Glass) отлично показал, насколько это просто и как мало кода вам нужно, да, в докладе были некоторые проблемы с другой версией jsdom, но речь шла в начале ноября, поэтому это должно быть уже исправлено.

Вы можете посмотреть все материалы из выступления на его странице GitHub .
А вот его скребок , который получает текущие заголовки новостей от Digg.

Серьезно, это стоит того, чтобы заставить Node.js работать в вашей системе, так как в итоге вы получили всю прелесть YUI3 на стороне сервера.

0 голосов
/ 14 октября 2012

Python и BeautifulSoup, просты в освоении и очень эффективны.

0 голосов
/ 03 декабря 2010

Используйте язык, наиболее знакомый вам или язык, который вы хотите выучить больше всего.Вы можете написать веб-сканер на любом языке.

Я лично разработал сканеры на Java, Ruby и Perl.Все эти языки соответствуют вашим требованиям.(Да, даже сканер в Java занимал разумное место в памяти.) Из них Java был моим любимым, потому что он имел самые зрелые библиотеки HTTP и HTML.Если я обнаружу, что пишу другой, я хочу попробовать Python.

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

0 голосов
/ 03 декабря 2010

Я почти уверен, что в любом языке есть что-то, что может с этим справиться.Вы уверены, что node.js не дает сбоя из-за проблемы в вашем коде?Почему бы не использовать Ruby, если вам это удобно?

Также есть BeautifulSoup (Python), который вы можете рассмотреть, если основным препятствием является разбор HTML.

...