Kodomo

Пользователь

ДЗ №10

Дедлайн: 16:40 пятница 28.11.2014.

Требования к оформлению обвычные (и, как обычно, сказываются на оценке только в диапазоне 7~10 баллов):

  • Файл с программой должен называться именно так, как указано в задании
  • Во всех программах должны быть содержательные имена переменных
  • Во всех программах не должно быть строк длиннее 75 символов, а если такие строки возникли, части таких строк нужно выносить в отдельные переменные или функции.
  • Функции должны сопровождаться docstring
  • Тело любой функции должно иметь длину не более 10 строк
  • Программа не должна содержать (в разумных пределах) дублирования кода

В большинстве из этих заданий почти невозможно достигнуть точности 100%. Здесь невозможно всё делать идеально-штатными средствами, иногда приходится срезать углы. Нужно смотреть на данные и оценивать, какого качества они получились.

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

В значительной мере это задание больше на регулярные выражения, нежели на работу с сетью. (В работе с сетью всё очень просто).

Если в первой задаче недоделать очистку текста и формирование выдачи (а только скачать всё как есть), то это будет аккурат 6 баллов; но, в таких масштабах регулярные выражения для вас настолько полезный инструмент, что я не стал выделять это как отдельное задание.

Материалы

Можно пользоваться любыми пакетами для работы с сетью или файловой системой, а то и с html, если вы хотите в них копаться1. (Ходившие слухи о том, что я настаиваю на использовании urllib несколько преувеличены).

Делитесь полезными ссылками, наиболее понравившиеся из них я добавлю сюда же.

Сольные задания

  1. Создайте в репозитории папку hw10, и все программы этого задания сохраняйте в ней.

  2. (8 баллов) Напишите программу shakespear.py, которая скачивает все сонеты с сайта http://www.stihi-rus.ru/World/Shekspir/ . Программа создаёт текстовые файлы по номерам сонетов. Программа извлекает из текста: заголовок, имя переводчика, и сохраняет файл в формате2:

    title:  Шекспир. Сонет 1
    translator:  Перевод С.Маршака
    russian:
    
    ...
    
    english:
    
    ...
  3. (9 баллов) Напишите программу stihi.py, которая скачивает весь текст с сайта stihi.ru . Программа должна уважать файл robots.txt. Программа оставляет от каждой страницы только название стихотворения (первая строка), имя автора (вторая строка), дату или копирайт (третья строка), и стихотворение (первая строка стихотворения оказывается пятой строкой в файле. Т.е. между стихотворением и метаданными есть одна пустая строка).

  4. (10 баллов) Напишите программу news-sources.py, которая скачивает с сайта newsru.com новости и для каждой новости все ссылки на внешние источники, которые в ней содержатся. Программа для каждой новости создаёт папку с именем, полученным из страницы новости заменой всех / на _. В папку программа сохраняет текст новости в файл news.txt (очищенный от всего, кроме новости), и в файлы, полученные из url заменой всех / на _, тексты всех внешних ссылок из новости, которые удалось добыть; тексты должны быть очищены от разметки. Программа должна учитывать robots.txt на всех сайтах.

    • * Приз "Thumbs up от Бориса Орехова", если программа при этом извлекает из новостей каждого источника название, автора и дату, и сохраняет их в отдельной табличке.3

  5. (10 баллов) Если вам нужен краулер в рамках НИС или курсовой, напишите его. Краулер должен уважать robots.txt и выдавать тексты очищенными от лишней4 разметки.

Групповые задания

Если у вас есть идея, какую задачу здесь можно делать группой, выскажите её. (У меня пока что фантазии не хватило). Начиная с этого занятия я поощряю выполнение заданий группами, но в этом случае постановка задачи должна быть такой, чтобы каждый участник группы потренировал некоторые релевантные навыки.

  1. Но предупреждаю, что они здесь дают мизерный выигрыш (1)

  2. Хотя такой формат и не совпадает ни с одним из общепризнанным, из него очень легко конвертировать данные в любой стандартный формат (2)

  3. Это если кому-то из вас вдруг показалось мало. (3)

  4. Если по задаче вам требуется, чтобы часть разметки сохранялась, её нужно не выбрасывать (4)