Pull to refresh

Мирный ботнет

Reading time5 min
Views1.6K
Современные поисковые системы способны самостоятельно упорядочивать огромные объемы информации, позволяя быстро находить материалы по любой теме. Но когда дело касается поиска товаров в интернет-магазинах или вакансий в базах рекрутинговых агентств, или предложений автомобилей по сайтам автосалонов, в общем поиска любой каталогизированной информации в Интернет, о самостоятельности поисковых систем говорить не приходится, потому что для удовлетворения таких запросов в большинстве случаев они требуют от сайтов-источников выгрузки (Datа Feed) своих каталогов в специальном формате.

Автоматическое извлечение фактов из каталогов, не имеющих семантической разметки, является непростой задачей, но всё же она много проще задачи извлечения фактов из произвольного неструктурированного текста.

Технология


Мы разработали технологию, позволяющую создавать полноценные каталого-ориентированные поисковые системы, которые не требуют представления данных в каком-либо формализованном виде, а с помощью несколько необычного поискового робота способны самостоятельно извлекать информацию из произвольно-структурированных web-каталогов, составленных на любом языке. Необычность робота состоит в том, что это программа на JavaScript, которая анализирует web-страницы, загружая их во фрейм (iframe) через web-прокси. В таком спорном на первый взгляд решении имеется масса преимуществ.

JavaScript-робот «видит» сайты так же, как их видят обычные пользователи. Это позволяет ему обрабатывать даже те сайты, контент которых частично или полностью формируется из JavaScript, и, соответственно, недоступен для обычного робота. Кроме того возможность эмулировать различные события (нажатие кнопок, например) позволяет JavaScript-роботу не только просматривать динамические сайты, но осуществлять навигацию по ним.

Анализируя web-страницы, традиционные поисковые системы фокусируются в основном на содержимом, не уделяя особого внимания оформлению (дизайну). Робот каталого-ориентированой поисковой системы должен действовать ещё более избирательно, извлекая из этого содержимого только некоторые факты. Анализ страниц каталогов с учетом оформления, или точнее говоря с учетом того, как их видит пользователь, позволяет JavaScript-роботу лучше выполнять свою работу.

Для работы «армии» поисковых роботов требуются немалые вычислительные ресурсы. В отличии от традиционных краулеров, для работы которых необходимы специальные программные и аппаратные средства, JavaScript-робот позволяет встроить себя прямо в сайт поисковой системы, что дает возможность использовать вычислительные мощности браузеров конечных пользователей, пока они работают с сайтом. Получается что-то среднее между ботнетом и пиринговыми сетями: сайт предоставляет пользователю информацию — пользователь помогает сайту вычислительными мощностями.

Как всё это работает?


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

Для подключения нового каталога к поисковой системе в большинстве случаев требуется лишь указать URL первой страницы каталога. Если такого не существует, то нужно указать «ближайший» URL. Система загрузит его через web-прокси во фрейм и будет внимательно следить за действиями пользователя, которому необходимо только продемонстрировать, как кратчайшим путем перейти к началу каталога. Демонстрация также может потребоваться, если на сайте используется необычная система навигации. То есть, система подключения сложна ровно настолько, насколько сложно обычному пользователю добраться до первой страницы каталога.

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

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

Может показаться, что наша технология требует постоянного участия человека. Это не так, я описал самый худший вариант развития событий. С каждым новым подключенным каталогом система становится всё умнее, а участие человека требуется всё реже и всё в меньшем объёме.

Безопасность


Загрузка в браузер конечного пользователя потенциально небезопасных страниц сайтов-каталогов может привести к тому, что компьютер пользователя будет «заражен» вредоносным программным обеспечением. Мы осознаем всю серьезность этой проблемы. На данных момент краулер отключен для браузеров семейства Internet Explorer (для мобильных платформ, кстати, тоже но по другим соображениям). Мы также работаем над добавлением проверки загружаемых ресурсов с помощью Google Safe Browsing API. А так как робот открывает все страницы только через web-прокси, последний очевидно имеет возможность анализировать их содержимое. Сейчас мы рассматриваем различные варианты того, как лучше использовать эту возможность, чтобы максимально обезопасить конечных пользователей.

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

Лучше один раз увидеть, чем сто раз услышать


Чтобы продемонстрировать технологию в действии, мы создали поисковую систему Maperty, которая представляет из себя карту объектов недвижимости, предлагаемых в наем. В настоящее время Maperty является лишь лабораторным стендом для наших экспериментов, а также служит цели демонстрации работы технологии: пока пользователь работает с картой, поисковый робот загружает и обрабатывает новые предложения агентств недвижимости.

Сейчас карта пуста, но своей обработки ожидают порядка 10 тысяч предложений в Москве, Санкт-Петербурге, Киеве, Беларусии, Эстонии, Польше и Ирландии. Мы надеемся, что с помощью хабрэффекта, задача будет решена всего за несколько часов, но архитектура системы такова, что данные попадают на карту не мгновенно, а порциями, размер которых постепенно увеличивается по мере наступления конца суток.

Всех заинтересовавшихся приглашаем по адресу www.maperty.ru. Робот активируется только в Chrome, Firefox, Safari и Opera, а на разбор одного предложения роботу требуются примерно одна минута, поэтому, если вы хотите поучаствовать в нашем небольшом эксперименте, пожалуйста, не закрываете окно браузера, увидев пустую карту.

Что (как и где) было использовано


Google App Engine for Java (сервер для робота, сервер для Maperty);
Google Web Toolkit (робот, интерфейс Maperty);
Google Maps API (интерфейс Maperty)
Google Geocoding API (перевод адресов в координаты на карте в роботе);
Google Language API (помогает роботу);
Google Safe Browsing API (web-прокси, в работе);
Yahoo! Finance API (используется для пересчета валют в Maperty).
Tags:
Hubs:
Total votes 40: ↑30 and ↓10+20
Comments39

Articles