На текущий момент развития технических и программных средств компьютерных коммуникаций происходит постоянный рост объема новой информации и увеличение потоков информационного обмена в глобальной компьютерной сети, при этом стоит отметить, что современные тенденции развития ориентированы на еще больший рост обрабатываемых данных.
В силу выше сказанного, разработчики Web-приложений, а также администраторы Web-серверов (особенно предоставляющих услуги размещения сайтов или получающих данные из внешних источников) сталкиваются с необходимостью анализа и контроля информационных потоков, зачастую с различными и часто изменяемыми словарями команд (при этом подчас не отвечающим требованиям безопасности) и тенденцией роста размера передаваемой информации.
На сегодняшний момент разработано огромное количество библиотек, позволяющих разбивать HTML-поток на составляющие его компоненты для дальнейшей обработки. С нашей точки зрения, данный инструментарий позволит существенным образом сократить время на разработку некоторых Web-серверных приложений, обеспечить фильтрацию анализируемой информации на предмет нежелательного контента, кроме этого открывает новые методы создания серверных программ, получающих информационные потоки с других внешних Web-источников.
Цели исследования:
Разработать систему Web-серверных приложений, применяющих анализ HTML-потоков для автоматической фильтрации небезопасного или нежелательного контента, использующих внешние Web-источники для получения информации и ее последующей обработки и предоставления конечному пользователю.
Задачи:
1) Анализ современных инструментальных библиотек производящих производить обработку HTML-потоков их Web-источников.
2) Разработать интерфейсные программы позволяющие фильтровать небезопасное содержание с внешних Web-источников.
3) Реализовать методику разработки Web-серверных приложений, пользующихся внешними источниками данных, на примере создания оболочки, которая получает, обрабатывает и предоставляет полученную информацию с внешних Web-серверных приложений.
4) Создать API к своему Web-приложению, которое позволяло бы Web-администраторам и разработчикам легко фильтровать входящий HTML-поток.
5) Предоставить пользователю сервис, объединяющий несколько почтовых ящиков в один.
Вложение | Размер |
---|---|
work.doc | 269.5 КБ |
Содержание
Введение 2
Микрофреймворк «Flask». 5
Описание разработанных программных средств. 6
Детальное описание программ (декомпозиция разработанных средств). 9
Список используемой литературы. 12
На текущий момент развития технических и программных средств компьютерных коммуникаций происходит постоянный рост объема новой информации и увеличение потоков информационного обмена в глобальной компьютерной сети, при этом стоит отметить, что современные тенденции развития ориентированы на еще больший рост обрабатываемых данных.
В силу выше сказанного, разработчики Web-приложений, а также администраторы Web-серверов (особенно предоставляющих услуги размещения сайтов или получающих данные из внешних источников) сталкиваются с необходимостью анализа и контроля информационных потоков, зачастую с различными и часто изменяемыми словарями команд (при этом подчас не отвечающим требованиям безопасности) и тенденцией роста размера передаваемой информации.
На сегодняшний момент разработано огромное количество библиотек, позволяющих разбивать HTML-поток на составляющие его компоненты для дальнейшей обработки. С нашей точки зрения, данный инструментарий позволит существенным образом сократить время на разработку некоторых Web-серверных приложений, обеспечить фильтрацию анализируемой информации на предмет нежелательного контента, кроме этого открывает новые методы создания серверных программ, получающих информационные потоки с других внешних Web-источников.
Цели исследования:
Разработать систему Web-серверных приложений, применяющих анализ HTML-потоков для автоматической фильтрации небезопасного или нежелательного контента, использующих внешние Web-источники для получения информации и ее последующей обработки и предоставления конечному пользователю.
Задачи:
Одной из главных задач проекта является асинхронное получение HTML-потока и выделение из него нужной информации. Это можно было реализовать с помощью библиотеки «PyCurl». Она предоставляет возможность работы с HTML-потоком, но для того, чтобы выполнить GET запрос к сайту, требуется самому задавать HEAD параметры запроса (например, указывать user-agent). Также отсутствует адекватная поддержка асинхронных запросов. Одним из важнейших критериев для отбора библиотеки было наличие интерфейса, позволяющего работать с HTML-деревом. К сожалению, «PyCurl» его не имеет.
Еще одной библиотекой, подходящей по критериям отбора, является «Scrapy». Она, в отличие от того же «PyCurl» специально предназначена для парсинга сайтов: поддержка асинхронных запросов, наличие интерфейса для работы с HTML-деревом. Данная библиотека развивается с 2008 и ориентирована на большие проекты. Для реализации данного проекта требуется использовать лишь малую часть возможностей, которые поставляет библиотека. В итоге имеем качественную библиотеку, удовлетворяющую нашим требованиям и огромную документацию, на изучение которой уйдет не один день. Именно по этой причине мы отдали предпочтение библиотеке от русского разработчика под названием «Grab».
Данная библиотека является «оберткой»(как пишет сам автор) над «PyCurl» и «Lxml»(позволяет работать с HTML-деревом). Собственно, как и «Scrapy» она обладает возможностями, которые требуются от библиотеки, при этом, она имеет при себе лаконичную документацию на русском языке. Также хочется заметить, что она, в отличие от «Scrapy», не предназначена для больших проектов, и, по этой причине, имеет меньшее количество возможностей и, как следствие, более низкий порог вхождения и более высокую скорость разработки.
Еще одной задачей проекта является обработка HTML: удаление из него небезопасного содержимого. Для этой задачи прекрасно подходит библиотека «BeautifulSoup». Она позволяет не только разбирать HTML-поток на части, но и работать с ними: изменять, добавлять, удалять.
К сожалению, она гораздо медленне «Lxml» (которая умеет только извлекать информацию) и из-за этого ее использование ограничено. С помощью нее осуществляется обработка уже разобранных кусков HTML-потока.
Последняя задача состоит в том, чтобы как-нибудь отобразить пользователю ту информацию, которую он хочет увидить. Для этой задачи отлично подойдет Web-фреймворк. Так как использование Python'а вполне оправдано: именно на этом языке написано огромное количество библиотек, предназначеных для парсинга и также он показывает хорошую скорость работы. Сосбвенно для этого языка имеется два фреймворка, которые удовлетворяют требованиям: наличие шаблонизатора, ORM для работы с базой данных.
Первым является «Django». Он удволетворяет все требованиям, но, аналогично «Scrapy», он предназначен для больших Web-проектов, над которыми работают несколько человек. Из-за этого он обладает огромным количеством функционала, который нам не нужен.
Вторым же является «Flask», названный разработчиком микрофреймворком. Он имеет при себе лишь ядро, которое позволяет обрабатывать запросы к Web-приложению. Остальное: шаблонизатор и ORM надо либо реализовать самому, либо получить уже готовые библиотеки. Собственно, был выбран второй путь. Шаблонизатором является «Jinja2», а ORM - «SqlAlchemy». «Jinja2» является отличным подспорьем в руках верстальщика, так как позволяет выносить некоторую логику прямо в HTML. А «SqlAlchemy» является очень удобной ORM, которая позволяет легко описывать структуру базы данных через классы.
Как можно понять, «Flask» устаивает нас куда больше, чем «Django» ввиду своей ориентированности на более мелкие проекты.
Был разработан комплекс программных средств:
1. Модуль, производящий разбивку HTML-потока на компоненты, с последующей фильтрацией небезопасного или нежелательного контента.
2. Web-сервер, объединяющий несколько внешних HTML-потоков в один (собственный).
3. API (доступ к функциям сайта с внешних клиентов), являющийся интерфейсом к разработанным модулям.
4. Сервис, объединяющий несколько почтовых ящиков в один.
Сейчас наблюдается тенденция к увлечению объемов информации, появляющихся каждый день в глобальной компьютерной сети. Из-за этого пользователю очень трудно найти что-то нужное, также очень тяжело приходится и Web-администраторам: они просто не могут уследить за всей информацией, попадающей на их сайт, вследствие этого на нем может появится нежелательный, а местами даже опасный контент. Поэтому было решено написать несколько скриптов, которые могли бы получать HTML-поток с быстро наполняющихся сайтов (например, новостные ленты), убирать все небезопасное и, с нашей точки зрения, лишнее. Также нужен Web-сервер, который объединял бы их в одно целое, получал нужные для отображения данные и выводил их структурированном виде.
При переходе пользователя на сайт запускается главный скрипт, отвечающий за отображение интерфейса и запуск нескольких скриптов, далее именуемых парсерами, которые обходят определенные сайты и получают с них новую информацию, обрабатывают и возвращают ее обратно Web-серверу.
Сначала происходит обращение к базе данных для проверки даты последнего обновления кеша, если же он ялвяется устаревшим, то происходит очистка кеша и запуск двух парсеров: один отвечает за сайт Lenta.ru, а второй за Ria.ru. После того, как пауки закончили работу, они возвращают свои значения в базу данных. Далее происходит получение из нее новостей и их последующее отображение. Схема работы сайта показана на Рисунке 1.
Для того, чтобы разработанным модулем, позволяющим очень легко обрабатывать HTML-код могли пользоваться другие администраторы или разработчики, было решено написать свой API. Ниже приведено краткая документация.
Разработчик или администратор отправляют запрос, содержащий в себе HTML-код, который нужно очистить, теги и атрибуты, которые подлежат удалению и получают безопасный HTML-код. Схема показана на Рисунке 2. Если в процессе работы возникают ошибки, то сервер уведомляет о них разработчика.
Сейчас у огромного числа людей имеется свой почтовый ящик, а то и не один. В связи с этим встает вопрос о удобной работе с несколькими почтовыми Web-сервисами. Можно скачать программу и настроить ее, либо обратиться к таким сервисам, как Yandex или Google, которые сейчас умеют работать сразу с несколькими ящиками одновременно. Если пойти первым путем, то столкнешься с тем, а какую, собственно, программу выбрать и как правильно настроить. А если пользоваться Yandex или Google, то никаких проблем с настройкой, да и безопасность на высоте. Но тут появляется одна значимая проблема — слежение. Дело в том, что системы отслеживают, что приходит пользователю, определяют его предпочтения, и на основе этого выдают ему рекламу, по которой тот кликнет и они заработают деньги.
Именно из-за этого было решено реализовать Web-сервис, который может работать с любыми ящиками и при этом не следит за пользователями и прост в настройке.
Для того, чтобы начать с ним работать, нужно перейти на сайт, и зарегистрировать столько почтовых ящиков, сколько понадобиться и все, теперь можно читать письма. При этом, сайт не следит за пользователем и не складирует его данные в своей базе данных: все хранится в сессии браузера, естественно в закодированном виде.
Схема работы представлена на Рисунке 3.
Как только пользователь заходит на главную страницу, происходит проверка даты последнего обновления. Если последнее обновление производилось пять минут назад или более, то сервер запускает два парсера (для www.lenta.ru и www.ria.ru), которые проходят по последним новостям сайта и получают нужные данные, сохраняют картинки к новостям в специально отведенной для этого папке, картинкам присваиваются уникальные имена, основанные на timestamp. После выполнения они возвращают словарь с данными. Далее все значения записываются в базу данных MySQL (старые удаляются). После этого нужная информация отображается пользователю.
Аналогичное происходит при попытке посмотреть все новости за сегодняшний день. Хотя имеются и отличия. Например, если с момента последнего посещения прошло более 15 минут, то запускается нужный парсер (www.lenta.ru или www.ria.ru), которому в качестве входных параметров передаются категории, информацию из которых нужно получить. После того, как парсер соберет всю нужную информацию, он возвращает ее в виде словаря с данными. Далее происходит добавление данных в MySQL. После всего этого пользователю отображается нужная информация в структурированном виде. Если же случается, что последнее обновление производилось не в этот день (например, вчера), то также запускается парсер с теми же параметрами. При этом перед их запуском происходит удаление всех картинок и данных, которые были получены в прошлые дни. То есть сайт самоочищается. После всего этого пользователю отображается нужная информация.
Схема работы представлена на Рисунке 4.
Работа с базой данных производится через библиотеку «SQLAlchemy», которая очень тесно интегрирована с «Flask». Данная библиотека предоставляет очень мощный ORM.
Все парсеры работают по примерно одной и той же схеме, которую вы можете видеть на Рисунке 5.
Как уже сказано, для работы с API требуется совершить POST-запрос на сайт. В нем должны содержаться следующие данные:
Далее, в соответствии с отправленными данными, сервер обрабатывает полученный HTML-код и возвращает его HTML-потоком.
Если же, по каким-то причинам, полученный HTML-код является пустым, будет выведена ошибка: «NO_TEXT».
Схема работы API представлена на Рисунке 6.
На данном этапе разработки Web-приложения уже создано 4 «Паука», которые бегают по нескольким новостным сайтам и возвращают только нужную и, самое главное, безопасную информацию. Также частично реализован интерфейс для пользователя, который отображает ее в удобно читаемом сруктурированном виде. При переходе на созданный сайт можно не опасаться скриптов, которые следят за пользователем (например, «Google Adsense», или «Yandex»). Теперь, вместо того, чтобы запускать браузер с отключенным javascript и перепрыгивать с сайта на сайт, можно просто зайти на предоставляемый нами сервис и прочитать последние интересующие вас новости.
Также написан интерфейс к разработанному модулю, предоставляющему обработку HTML-кода.
Изучен протокол IMAP и реализована работа с несколькими почтовыми ящиками: на данном этапе возможно просматривать список непрочитанных писем, а также читать их содержимое.
«Течет река Волга»
Горячо - холодно
Щелкунчик
Самарские ученые разработали наноспутник, который поможет в освоении Арктики
Новогодние гирлянды