ДЗ №10
Дедлайн: 16:40 пятница 28.11.2014.
Требования к оформлению обвычные (и, как обычно, сказываются на оценке только в диапазоне 7~10 баллов):
- Файл с программой должен называться именно так, как указано в задании
- Во всех программах должны быть содержательные имена переменных
- Во всех программах не должно быть строк длиннее 75 символов, а если такие строки возникли, части таких строк нужно выносить в отдельные переменные или функции.
- Функции должны сопровождаться docstring
- Тело любой функции должно иметь длину не более 10 строк
- Программа не должна содержать (в разумных пределах) дублирования кода
В большинстве из этих заданий почти невозможно достигнуть точности 100%. Здесь невозможно всё делать идеально-штатными средствами, иногда приходится срезать углы. Нужно смотреть на данные и оценивать, какого качества они получились.
Кроме первой задачи предполагается, что вы делаете машинку, которая начинает что-то качать, и видно, что она делает нечто, довольно похожее на правду.
В значительной мере это задание больше на регулярные выражения, нежели на работу с сетью. (В работе с сетью всё очень просто).
Если в первой задаче недоделать очистку текста и формирование выдачи (а только скачать всё как есть), то это будет аккурат 6 баллов; но, в таких масштабах регулярные выражения для вас настолько полезный инструмент, что я не стал выделять это как отдельное задание.
Материалы
Можно пользоваться любыми пакетами для работы с сетью или файловой системой, а то и с html, если вы хотите в них копаться1. (Ходившие слухи о том, что я настаиваю на использовании urllib несколько преувеличены).
- возможно, кому-то из вас внезапно покажутся полезными:
- -- хотя подробный разговор про эти модули будет у нас через неделю.
любой хороший поисковик
Делитесь полезными ссылками, наиболее понравившиеся из них я добавлю сюда же.
Сольные задания
Создайте в репозитории папку hw10, и все программы этого задания сохраняйте в ней.
(8 баллов) Напишите программу shakespear.py, которая скачивает все сонеты с сайта http://www.stihi-rus.ru/World/Shekspir/ . Программа создаёт текстовые файлы по номерам сонетов. Программа извлекает из текста: заголовок, имя переводчика, и сохраняет файл в формате2:
title: Шекспир. Сонет 1 translator: Перевод С.Маршака russian: ... english: ...
(9 баллов) Напишите программу stihi.py, которая скачивает весь текст с сайта stihi.ru . Программа должна уважать файл robots.txt. Программа оставляет от каждой страницы только название стихотворения (первая строка), имя автора (вторая строка), дату или копирайт (третья строка), и стихотворение (первая строка стихотворения оказывается пятой строкой в файле. Т.е. между стихотворением и метаданными есть одна пустая строка).
(10 баллов) Напишите программу news-sources.py, которая скачивает с сайта newsru.com новости и для каждой новости все ссылки на внешние источники, которые в ней содержатся. Программа для каждой новости создаёт папку с именем, полученным из страницы новости заменой всех / на _. В папку программа сохраняет текст новости в файл news.txt (очищенный от всего, кроме новости), и в файлы, полученные из url заменой всех / на _, тексты всех внешних ссылок из новости, которые удалось добыть; тексты должны быть очищены от разметки. Программа должна учитывать robots.txt на всех сайтах.
* Приз "Thumbs up от Бориса Орехова", если программа при этом извлекает из новостей каждого источника название, автора и дату, и сохраняет их в отдельной табличке.3
(10 баллов) Если вам нужен краулер в рамках НИС или курсовой, напишите его. Краулер должен уважать robots.txt и выдавать тексты очищенными от лишней4 разметки.
Групповые задания
Если у вас есть идея, какую задачу здесь можно делать группой, выскажите её. (У меня пока что фантазии не хватило). Начиная с этого занятия я поощряю выполнение заданий группами, но в этом случае постановка задачи должна быть такой, чтобы каждый участник группы потренировал некоторые релевантные навыки.
Но предупреждаю, что они здесь дают мизерный выигрыш (1)
Хотя такой формат и не совпадает ни с одним из общепризнанным, из него очень легко конвертировать данные в любой стандартный формат (2)
Это если кому-то из вас вдруг показалось мало. (3)
Если по задаче вам требуется, чтобы часть разметки сохранялась, её нужно не выбрасывать (4)