Задание
Задание общее за блок.
Оценка за задание выставляется как наибольший балл из выполненных задач. Как водится, я могу снять 0~2 балла за плохо написанный код программы.1
Прочитайте все задания прежде, чем выбирать, какие из них вы будете делать.
Возможно, если вы работаете в одиночку, вам покажется полезнее браться за задачи начиная с 5.
Если вы хотите работать в команде, то вам доступно только задание 7. Советую посмотреть все предыдущие задания и, распределив по ролям, выполнить их, так как к этому сведётся 90% вашей работы. Аналитику придётся выполнить какую-то часть программистской работы тоже (либо вписать в код комментарии, описывающие постановку задачи каждой маленькой части кода), тестеру нужно либо собственноручно исправлять найденные ошибки, либо писать для них тесовые сценарии (на питоне).
(обязательная) Скачайте и установите себе TortoiseHG. Создайте на http://bitbucket.org репозиторий homework, выложите решение ваших задач в него, и пришлите мне на него ссылку (любую, я разберусь). Начиная с этого занятия я буду принимать только тот код, который лежит на bitbucket, по тем датам, которые указаны в репозитории.
(5 баллов) Напишите программу, у которой в тексте дан список адресов сайтов в одном домене и рядом название этого домена. Программа скачивает каждый из сайтов, ищет в нём все URL, и выводит их на экран по одному адресу на строку. Для каждого скачиваемого адреса программа должна проверять robots.txt для данного домена.
(6 баллов) Аналогично 1. Вдобавок в программе задано имя (заранее созданной) директории. Кроме отображения найденных адресов на экране, программа сохраняет текст каждой скаченной страницы в качестве файла в указанной директории. Имя файла – порядковый номер скаченной страницы. (Например "0001.html", ... "9999.html")
(8 баллов) Аналогично 2. Вдобавок в программе задано число совершаемых запросов и список всех посещённых сайтов (изначально он пустой). Программа в цикле до числа совершаемых запросов берёт один из адресов из списка сайтов, которые нужно скачать, скачивает, сохраняет в файл, находит в тексте сайта ссылки и добавляет их в конец списка сайтов, которые нужно скачать. При этом программа должна проверять, что посещает только сайты в выбранном домене (иначе проверки robots.txt не работают).
(9 баллов) Аналогично 3. Вдобавок, программа ищет не только URL в тексте сайта, но и все href=..., и если там указаны абсолютные или относительные ссылки, преобразует их в полные адреса.
(8 баллов) Зайдите в Интернет. Поищите что-нибудь вроде "windows web crawler" или "web downloader". Выберите какую-нибудь из предложенных программ. (По существу, они делают то же, что в задании 1-4, зачастую, несколько лучше. Однако, идя по пути заданий 1-4, вы имеете возможность гораздо более тонкого контроля за тем, что вам интересно скачивать). Скачайте с её помощью интересующий набор сайтов. Напишите программу, которая обходит директории со скаченными файлами, и для каждого файла *.html создаёт файл *.txt с чисто текстовым содержанием скаченного. (Т.е. каждый файл читает, удаляет из него все тэги, и сохраняет оставшееся в выходной файл). Текстовую выдачу программа сохраняет в отдельную директорию и называет по номерам, а не сохраняет исходные названия файлов. (Т.е. на вход программе может быть дана сложная иерархия директорий, а на выходе останется одна плоская директория с нумерованными файлами). Файлы должны нумероваться 0001.txt ... 9999.txt2
(10 баллов) Аналогично 5, но рядом с каждым *.txt создавайте файл *.split, содержащий ровно одно предложение на строку, и *.tok, содержащий ровно один токен на строку.
(8~10 баллов) Для команды из 2-3 человек. Напишите свой краулер, сплиттер и токенизатор. Программа должна в зависимости от пожелания пользователей (допустимые способы: GUI, параметры командной строки, файл с настройками или редактирование констант в начале программы) выдавать/не выдавать сырые html-файлы, txt-файлы, полученные чисткой html, tok-файлы с токенами и типами токенов3, split-файлы с предложениями.
Общее пояснение: *.tok и *.split – это не новый формат файлов. Это такие же простые текстовые файлы, как и раньше, названные по-другому для того, чтобы отличать их назначение.
И не потому, что я такой злобный, а потому, что как только вы начнёте с самого начала писать маленькие функции и хорошо называть функции и переменные, вы обнаружите, что те же задачи стали сильно проще! (1)
Задание выглядит гораздо страшнее, чем оно есть на самом деле. На самом деле решение сравнимо по длине с постановкой задачи (2)
Это отличает от 1~6 (3)