Рекомендательная система (семинар) — различия между версиями

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск
 
(не показано 28 промежуточных версии 2 участников)
Строка 1: Строка 1:
Семинар проекта [[Рекомендательная система (проект)]].
+
Семинар проекта [[Рекомендательная система (проект)]], последние семинары
 +
[http://wiki.cs.hse.ru/Рекомендательная_система_(семинар)#.D0.A1.D0.B5.D0.BC.D0.B8.D0.BD.D0.B0.D1.80.D1.8B здесь]
  
 
==Правила игры ==
 
==Правила игры ==
 
* '''Ментор:''' [[Участник:Simagin.denis|Симагин Денис]].
 
* '''Ментор:''' [[Участник:Simagin.denis|Симагин Денис]].
 
* '''Место:''' офис Яндекса ([https://maps.yandex.ru/213/moscow/?ll=37.590150%2C55.734065&z=18&l=stv%2Csta&panorama%5Bpoint%5D=37.589416%2C55.733747&panorama%5Bdirection%5D=40.412258%2C-11.910596&panorama%5Bspan%5D=130.000000%2C52.209677 место встречи])
 
* '''Место:''' офис Яндекса ([https://maps.yandex.ru/213/moscow/?ll=37.590150%2C55.734065&z=18&l=stv%2Csta&panorama%5Bpoint%5D=37.589416%2C55.733747&panorama%5Bdirection%5D=40.412258%2C-11.910596&panorama%5Bspan%5D=130.000000%2C52.209677 место встречи])
* '''Время:''' c 17:00 до 18:30, опаздывающих ждем не дольше 10 минут.
+
* '''Время:''' c 17:30, вторник.
  
 
Общение с ментором вне занятий семинара приветствуется. Можно задавать вопросы, в том числе философские, или советоваться. Но перед тем, как написать письмо, попробуйте спросить это у [https://ya.ru Яндекса]. Также не обижайтесь, если в ответ вам пришла ссылка на документацию, поверьте, порой сложно объяснить лучше, чем написано там.
 
Общение с ментором вне занятий семинара приветствуется. Можно задавать вопросы, в том числе философские, или советоваться. Но перед тем, как написать письмо, попробуйте спросить это у [https://ya.ru Яндекса]. Также не обижайтесь, если в ответ вам пришла ссылка на документацию, поверьте, порой сложно объяснить лучше, чем написано там.
Строка 25: Строка 26:
  
 
Ваш процесс разработки должен выглядеть следующим образом. Вы создаете себе issue, даете исчерпывающее описание. Создаете новую ветку и ведете в ней разработку. Какие-то проверенные куски кода нужно фиксировать в виде commit-ов и делать периодические push в удаленный репозиторий. Когда issue выполнено, вы вливайтесь в master-ветку с помощью merge --squash и делаете commit, название которого соответствует выполненному issue.
 
Ваш процесс разработки должен выглядеть следующим образом. Вы создаете себе issue, даете исчерпывающее описание. Создаете новую ветку и ведете в ней разработку. Какие-то проверенные куски кода нужно фиксировать в виде commit-ов и делать периодические push в удаленный репозиторий. Когда issue выполнено, вы вливайтесь в master-ветку с помощью merge --squash и делаете commit, название которого соответствует выполненному issue.
 +
 +
===Итоговый отчет===
 +
В своем отчете необходимо следующие вопросы. Будьте объективны.
 +
# Чего вы ожидали от проекта? Оправдались ли ваши ожидания?
 +
# Считаете ли вы этот опыт полезным?
 +
# С какими новыми технологиями познакомились? Получили ли новые знания?
 +
# Кратко опишите проделанную работу.
 +
# Сильные и слабые стороны вашего проекта.
 +
# Что бы хотели сделать, но не успели?
 +
# Оцените сами себя по 10-балльной шкале.
 +
# Как вы оцениваете работу ментора и общую организацию проекта? Укажите достоинства и недостатки.
 +
 +
В итоге необходимо прислать pdf и подготовить рассказ на 5-7 минут.
  
 
==Материалы==
 
==Материалы==
  
 
===Python===
 
===Python===
* Библиотека [https://docs.python.org/3/library/argparse.html argparse].
+
====Общая информация====
* Что такое [https://en.wikipedia.org/wiki/Global_interpreter_lock GIL]?
+
# О языке [https://docs.python.org/3/tutorial/index.html Python], и его стандартной [https://docs.python.org/3/library/index.html библиотеке].
* Многопоточность Python - [https://docs.python.org/3/library/threading.html threading].
+
# Что такое [https://en.wikipedia.org/wiki/Global_interpreter_lock GIL]?
* О языке [https://docs.python.org/3/tutorial/index.html Python],  и его стандартной [https://docs.python.org/3/library/index.html библиотеке]. Уделите внимание:
+
 
# Обработке ключей программы - [https://docs.python.org/3/library/argparse.html argparse lib].
+
====Стандартная библиотека====
 +
# Обработка ключей программы - [https://docs.python.org/3/library/argparse.html argparse lib].
 +
# Многопоточность в Python - [https://docs.python.org/3/library/threading.html threading].
 
# Работе с сетью - [https://docs.python.org/3/library/urllib.html URL handling modules].
 
# Работе с сетью - [https://docs.python.org/3/library/urllib.html URL handling modules].
# Регулярным выражениям - [https://docs.python.org/3/library/re.html Regular expression operations].
+
# Регулярные выражения - [https://docs.python.org/3/library/re.html Regular expression operations].
# Парсеру HTML - [https://docs.python.org/3/library/markup.html markup tool].
+
# Парсер HTML - [https://docs.python.org/3/library/markup.html markup tool].
 +
# Логирование - [https://docs.python.org/3/library/logging.html logging].
 +
# Инструмент для отладки - [https://docs.python.org/3/library/pdb.html pdb].
 +
 
 +
====Библиотеки====
 +
# Математика - [http://docs.scipy.org/doc/numpy/reference/ numpy] и [http://docs.scipy.org/doc/scipy/reference/ scipy]
 +
# Графики - [http://matplotlib.org plot]
 +
# Машинное обучение - [http://scikit-learn.org/stable/index.html SciKit learn].
  
* Хорошие библиотеки для математики [http://docs.scipy.org/doc/numpy/reference/ numpy] и [http://docs.scipy.org/doc/scipy/reference/ scipy], а также [http://matplotlib.org plot] для графиков.
+
====Инструменты====
* Библиотеки для машинного обучения - [http://scikit-learn.org/stable/index.html SciKit learn].
+
# Менеджер пакетов - [http://pip.readthedocs.org/en/stable/ pip]
* Удобная среда для экспериментов - [http://ipython.org/notebook IPyhton].
+
# Удобная среда для экспериментов - [http://ipython.org/notebook IPyhton].
 +
# Удобный редактор - [http://www.sublimetext.com Sublime Text 3].
 +
# Популярная IDE для ленивых - [http://www.jetbrains.com/pycharm/ PyCharm].
  
 
===Примеры===
 
===Примеры===
 
* Загрузка страницы семинара помощью библиотеки urllib [http://pastebin.com/qcqdQZLD [source]].
 
* Загрузка страницы семинара помощью библиотеки urllib [http://pastebin.com/qcqdQZLD [source]].
 
* Простейший парсер HTML5 (извлекает заголовок страницы семинар) [http://pastebin.com/fCshurqB [source]].
 
* Простейший парсер HTML5 (извлекает заголовок страницы семинар) [http://pastebin.com/fCshurqB [source]].
 +
* Набор [https://github.com/dasimagin/Project2016/tree/master/tutorials туториалов] по машинному обучению.
  
 
===Git===
 
===Git===
Строка 53: Строка 79:
 
* [http://git-scm.com/doc Git - Documentation] официальная документация Git.  
 
* [http://git-scm.com/doc Git - Documentation] официальная документация Git.  
 
* [https://www.atlassian.com/git/tutorials/ Atlassian git tutorial] стань git гуру
 
* [https://www.atlassian.com/git/tutorials/ Atlassian git tutorial] стань git гуру
 
===Man man===
 
* Что такое [https://en.wikipedia.org/wiki/Man_page man]?
 
* Что такое [https://en.wikipedia.org/wiki/GNU_Screen screen]?
 
 
  
 
===Книги===
 
===Книги===
Строка 67: Строка 88:
  
 
== Семинары ==
 
== Семинары ==
 +
 +
===S05.31===
 +
Защита проектов. Итоговые оценки.
 +
 +
{| class="wikitable"
 +
|-
 +
! Студент !! Оценка
 +
|-
 +
| Остяков Павел || 10
 +
|-
 +
| Иовлева Анастасия || 8
 +
|-
 +
| Артемьев Максимилиан || 8
 +
|-
 +
| Жилкина Ксения || 7
 +
|-
 +
| Глазкова Екатерина  || 7
 +
|-
 +
| Крутой Никита  || 7
 +
|-
 +
| Лазарев Владислав  || 6
 +
|-
 +
| Батурин Валера  || 6
 +
|}
 +
 +
===S04.19===
 +
Говорили о том, как делать первые шаги в обучение.
 +
Стоит почитать [http://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_data.html этот] мануал.
 +
Там все достаточно подробно описано.На что нужно обратить внимание:
 +
# Как из текста создать вектор признаков. Что такое  tf-idf.
 +
# Посмотреть, как обучается модель. Это очень просто.
 +
# Обратить внимание на тестирование полученного классификатора и настройку его внешних параметров.
 +
 +
Начать свое обучение советую с [http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier SGDClassifier].
 +
Если будут какие-то вопросы, то обращайтесь. И не отчаивайтесь, если качество классификатора низкое. Это нормально, так как у вас маленькая выборка для обучения.
 +
Попробуйте разметить хотя бы 120 статей. Тогда можно разделить выборку на 3 части, к примеру, так: 80 - обучение, 20 -- настройка внешних параметров, 20 -- тестирование.
 +
 +
===H04.16===
 +
Принципиально новый материал не был рассмотрен. Зато мы увидели, как [https://vk.com/zhuzhilkina Ксюша] ела бургер :)
 +
 +
===S04.12===
 +
Пообщались в Starbacks с теми, кто пришел.
 +
 +
# Как поднять демона.
 +
# Что такое [https://en.wikipedia.org/wiki/Cron cron].
 +
# Дал наводку на команду [https://en.wikipedia.org/wiki/Alias_(command) alias].
 +
 +
===S04.06===
 +
 +
''Занятие не состоялось!''
 +
 +
===S03.16===
 +
 +
# Говорили  о [https://en.wikipedia.org/wiki/Gradient_descent градиентном спуске].
 +
# Делали первые шаги в ipython и в машинном обучении на основе этого [https://github.com/dasimagin/Project2016/blob/master/tutorials/1.Linear%20regresion.ipynb туториала].
 +
 +
===S03.09===
 +
====Задача линейной классификации====
 +
# [https://en.wikipedia.org/wiki/Statistical_classification Задача классификации].
 +
# [https://en.wikipedia.org/wiki/Linear_separability Линейная разделимость].
 +
# [http://www.machinelearning.ru/wiki/index.php?title=Линейный_классификатор Линейный классификатор].
 +
# [http://www.machinelearning.ru/wiki/index.php?title=Метод_наименьших_квадратов Метод наименьших квадратов].
 +
# [http://www.machinelearning.ru/wiki/index.php?title=Логистическая_регрессия Логистическая регрессия].
 +
 +
Затронули тему создания признаков, а конкретно [https://en.wikipedia.org/wiki/Tf–idf tf-idf].
 +
 +
====Python====
 +
# Как работает [https://docs.python.org/3/reference/import.html импорт].
 +
# Немного о документации в Python, или [https://www.python.org/dev/peps/pep-0257/ PEP-257].
 +
 +
====Задание====
 +
# Подробно изучить [http://www.machinelearning.ru/wiki/index.php?title=Метод_градиентного_спуска метод градиентного спуска].
 +
# Ознакомиться с [http://www.machinelearning.ru/wiki/index.php?title=SVM SVM].
 +
 +
===H02.23===
 +
# Провели своеобразный хакатон. Мне он показался не самым плодотворным...
 +
# Поели пиццу с роллами и, надеюсь, еще больше сдружились.
 +
 +
====Задание====
 +
# В предстоящие выходные (27-28) проведем первый раунд ревью. Доведите до ума то, что успеете. После ревью вы получите представление о том, как должен выглядеть код.
 +
 +
====Материалы====
 +
# Пример [https://github.com/dasimagin/Project2016/tree/master/wiki-crawler crawler-а] для [https://simple.wikipedia.org simple wikipedia].
 +
 +
----
 +
 +
===S02.17===
 +
# Обсудили, у кого какие проблемы возникли за прошедшую неделю.
 +
# Договорились делать более подробные коммиты и таски.
 +
# Провели небольшое введение в машинное обучение.
 +
 +
====Задание====
 +
# Писать crawler
 +
# Подумать, как дообучать линейный классификатор, если в мешке слов появляются новые частые слова
 +
# Изучить команду [https://en.wikipedia.org/wiki/Less_(Unix) less]
 +
# Изучить - [https://docs.python.org/3.5/tutorial/interpreter.html это]
 +
# Добиться понимания, что такое [https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol http]
 +
 +
----
  
 
===S02.10===
 
===S02.10===
Строка 110: Строка 230:
 
* Загрузка страницы семинара помощью библиотеки urllib [http://pastebin.com/qcqdQZLD [source]].
 
* Загрузка страницы семинара помощью библиотеки urllib [http://pastebin.com/qcqdQZLD [source]].
 
* Простейший парсер HTML5 (извлекает заголовок страницы семинар) [http://pastebin.com/fCshurqB [source]].
 
* Простейший парсер HTML5 (извлекает заголовок страницы семинар) [http://pastebin.com/fCshurqB [source]].
 
 
  
 
====Задание====
 
====Задание====
Строка 118: Строка 236:
 
# Почитайте про [https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol http].
 
# Почитайте про [https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol http].
  
=====Материалы=====
+
====Материалы====
'''Про гит'''
+
=====Про гит=====
 
# Кратко о контроле версий можно прочитать [http://git-scm.com/book/ru/v1/Введение-О-контроле-версий здесь].
 
# Кратко о контроле версий можно прочитать [http://git-scm.com/book/ru/v1/Введение-О-контроле-версий здесь].
 
# Git, за или против? Можно посмотреть [https://ru.wikipedia.org/wiki/Git#.D0.9F.D1.80.D0.B5.D0.B8.D0.BC.D1.83.D1.89.D0.B5.D1.81.D1.82.D0.B2.D0.B0_.D0.B8_.D0.BD.D0.B5.D0.B4.D0.BE.D1.81.D1.82.D0.B0.D1.82.D0.BA.D0.B8 здесь]
 
# Git, за или против? Можно посмотреть [https://ru.wikipedia.org/wiki/Git#.D0.9F.D1.80.D0.B5.D0.B8.D0.BC.D1.83.D1.89.D0.B5.D1.81.D1.82.D0.B2.D0.B0_.D0.B8_.D0.BD.D0.B5.D0.B4.D0.BE.D1.81.D1.82.D0.B0.D1.82.D0.BA.D0.B8 здесь]
 
# [https://code.google.com/p/support/wiki/DVCSAnalysis Git Vs Mercurial] и [https://code.google.com/p/support/wiki/ChoosingAVersionControlSystem Git Vs SVN]
 
# [https://code.google.com/p/support/wiki/DVCSAnalysis Git Vs Mercurial] и [https://code.google.com/p/support/wiki/ChoosingAVersionControlSystem Git Vs SVN]
  
'''Про Python'''
+
=====Про Python=====
 
# Библиотека [https://docs.python.org/3/library/argparse.html argparse].
 
# Библиотека [https://docs.python.org/3/library/argparse.html argparse].
 
# Что такое [https://en.wikipedia.org/wiki/Global_interpreter_lock GIL]?
 
# Что такое [https://en.wikipedia.org/wiki/Global_interpreter_lock GIL]?
 
#  Многопоточность в Python - [https://docs.python.org/3/library/threading.html threading].
 
#  Многопоточность в Python - [https://docs.python.org/3/library/threading.html threading].
  
'''Man'''
+
=====Man=====
 
# Что такое [https://en.wikipedia.org/wiki/Man_page man]?
 
# Что такое [https://en.wikipedia.org/wiki/Man_page man]?
 
# Что такое [https://en.wikipedia.org/wiki/GNU_Screen screen]?
 
# Что такое [https://en.wikipedia.org/wiki/GNU_Screen screen]?
 +
 +
----
  
 
===S02.03===
 
===S02.03===

Текущая версия на 14:05, 1 июня 2016

Семинар проекта Рекомендательная система (проект), последние семинары здесь

Правила игры

Общение с ментором вне занятий семинара приветствуется. Можно задавать вопросы, в том числе философские, или советоваться. Но перед тем, как написать письмо, попробуйте спросить это у Яндекса. Также не обижайтесь, если в ответ вам пришла ссылка на документацию, поверьте, порой сложно объяснить лучше, чем написано там.

Ключевые точки

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

  1. 1-6 февраля - первая неделя занятий со студентами.
  2. 22-28 февраля - 1 точка, вы определились с ресурсом, и приближайтесь к выполнению заданий на 4.
  3. 28 марта - 3 апреля - сессия у студентов.
  4. 25-30 апреля - 2 точка, часть на 4 выполнена и прошла ревью. Вы создали список заданий для повышения оценки и к нему приступили.
  5. 30 мая - 3 июня - окончание проектной работы, вы готовы, как пионеры.
  6. начало июня - конкурс проектов.

Репозиторий

Мы будем использовать git в качестве системы контроля версий. Удаленный репозиторий будет находиться на bitbucket. Заведите там себе учетную запись и создайте репозиторий учебного проекта. Он должен быть приватным, доступ должен быть только у вас, ментора и кураторов.

Разработка

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

Ваш процесс разработки должен выглядеть следующим образом. Вы создаете себе issue, даете исчерпывающее описание. Создаете новую ветку и ведете в ней разработку. Какие-то проверенные куски кода нужно фиксировать в виде commit-ов и делать периодические push в удаленный репозиторий. Когда issue выполнено, вы вливайтесь в master-ветку с помощью merge --squash и делаете commit, название которого соответствует выполненному issue.

Итоговый отчет

В своем отчете необходимо следующие вопросы. Будьте объективны.

  1. Чего вы ожидали от проекта? Оправдались ли ваши ожидания?
  2. Считаете ли вы этот опыт полезным?
  3. С какими новыми технологиями познакомились? Получили ли новые знания?
  4. Кратко опишите проделанную работу.
  5. Сильные и слабые стороны вашего проекта.
  6. Что бы хотели сделать, но не успели?
  7. Оцените сами себя по 10-балльной шкале.
  8. Как вы оцениваете работу ментора и общую организацию проекта? Укажите достоинства и недостатки.

В итоге необходимо прислать pdf и подготовить рассказ на 5-7 минут.

Материалы

Python

Общая информация

  1. О языке Python, и его стандартной библиотеке.
  2. Что такое GIL?

Стандартная библиотека

  1. Обработка ключей программы - argparse lib.
  2. Многопоточность в Python - threading.
  3. Работе с сетью - URL handling modules.
  4. Регулярные выражения - Regular expression operations.
  5. Парсер HTML - markup tool.
  6. Логирование - logging.
  7. Инструмент для отладки - pdb.

Библиотеки

  1. Математика - numpy и scipy
  2. Графики - plot
  3. Машинное обучение - SciKit learn.

Инструменты

  1. Менеджер пакетов - pip
  2. Удобная среда для экспериментов - IPyhton.
  3. Удобный редактор - Sublime Text 3.
  4. Популярная IDE для ленивых - PyCharm.

Примеры

  • Загрузка страницы семинара помощью библиотеки urllib [source].
  • Простейший парсер HTML5 (извлекает заголовок страницы семинар) [source].
  • Набор туториалов по машинному обучению.

Git

Книги

Статьи

Семинары

S05.31

Защита проектов. Итоговые оценки.

Студент Оценка
Остяков Павел 10
Иовлева Анастасия 8
Артемьев Максимилиан 8
Жилкина Ксения 7
Глазкова Екатерина 7
Крутой Никита 7
Лазарев Владислав 6
Батурин Валера 6

S04.19

Говорили о том, как делать первые шаги в обучение. Стоит почитать этот мануал. Там все достаточно подробно описано.На что нужно обратить внимание:

  1. Как из текста создать вектор признаков. Что такое tf-idf.
  2. Посмотреть, как обучается модель. Это очень просто.
  3. Обратить внимание на тестирование полученного классификатора и настройку его внешних параметров.

Начать свое обучение советую с SGDClassifier. Если будут какие-то вопросы, то обращайтесь. И не отчаивайтесь, если качество классификатора низкое. Это нормально, так как у вас маленькая выборка для обучения. Попробуйте разметить хотя бы 120 статей. Тогда можно разделить выборку на 3 части, к примеру, так: 80 - обучение, 20 -- настройка внешних параметров, 20 -- тестирование.

H04.16

Принципиально новый материал не был рассмотрен. Зато мы увидели, как Ксюша ела бургер :)

S04.12

Пообщались в Starbacks с теми, кто пришел.

  1. Как поднять демона.
  2. Что такое cron.
  3. Дал наводку на команду alias.

S04.06

Занятие не состоялось!

S03.16

  1. Говорили о градиентном спуске.
  2. Делали первые шаги в ipython и в машинном обучении на основе этого туториала.

S03.09

Задача линейной классификации

  1. Задача классификации.
  2. Линейная разделимость.
  3. Линейный классификатор.
  4. Метод наименьших квадратов.
  5. Логистическая регрессия.

Затронули тему создания признаков, а конкретно tf-idf.

Python

  1. Как работает импорт.
  2. Немного о документации в Python, или PEP-257.

Задание

  1. Подробно изучить метод градиентного спуска.
  2. Ознакомиться с SVM.

H02.23

  1. Провели своеобразный хакатон. Мне он показался не самым плодотворным...
  2. Поели пиццу с роллами и, надеюсь, еще больше сдружились.

Задание

  1. В предстоящие выходные (27-28) проведем первый раунд ревью. Доведите до ума то, что успеете. После ревью вы получите представление о том, как должен выглядеть код.

Материалы

  1. Пример crawler-а для simple wikipedia.

S02.17

  1. Обсудили, у кого какие проблемы возникли за прошедшую неделю.
  2. Договорились делать более подробные коммиты и таски.
  3. Провели небольшое введение в машинное обучение.

Задание

  1. Писать crawler
  2. Подумать, как дообучать линейный классификатор, если в мешке слов появляются новые частые слова
  3. Изучить команду less
  4. Изучить - это
  5. Добиться понимания, что такое http

S02.10

Как вести репозиторий

  1. Обязательно должна быть своя вики (та, которая на битбакете). В ней нужно вести подробный дневник разработки, так, чтобы можно было открыть и сразу понять, что происходит, как шла работа, зачем все и как устроено.
  2. Проект разбивается на подзадачи. Для каждой из них нужен емкий issue, справка на вики и отдельная ветка. Перед тем, как сливать с основной веткой, написать ментору для ревью.
  3. Для слияния веток использовать merge только с ключом --squash.

Ревью будет протекать по почте, в виде комментариев к diff'у между текущей версией и последней проверенной.

Git

Обсуждали, как в целом устроен git. Commited, stage, work, где что находится. Рассказали, как работает .gitignore в зависимости от расположения. Упомянули некоторые команды:

  • git add -i добавляет в stage не целый файл, а отдельные строчки;
  • git reset может удалять из stage;
  • git add -u добавляет только те файлы, которые раньше уже когда-то добавлялись;
  • git commit --amend позволяет поменять название последнего коммита;
  • git log показывает историю коммитов;
  • git status показывает статус (отслеживаемость) файлов;
  • git <comand> --help всегда подробно расскажет, как устроена команда и какие у нее есть интересные ключи.

Сrawler

Работа crawler'а проходит примерно следующим образом:

  1. Находит ссылки на все еще не скаченные статьи.
  2. Скачивает их и сохраняет в качестве html-текста в отдельную директорию.
  3. Чистит html от бесполезных тегов и прочего, оставляя только текст. Полученный результат сохраняется отдельно как txt-файл.

Если хочется использовать базы данных для хранения файлов, то выбирать те, с которыми можно работать напрямую через Python.

Crawler должен быть реализован как консольная утилита (см. библиотеку argparse) и в нем должны присутствовать следующие команды со следующими ключами:

  1. update. Только находит ссылки.
    • --help. Инструкция к команде.
    • --from. С какого числа искать статьи.
    • --to. По какое число искать статьи.
    • --print. Выписывает найденные ссылки.
  2. download. Скачивает статьи.
    • --help. Инструкция к команде.
    • --all. Догружает все незагруженные статьи.
    • [urls]. Загружает только определенные статьи.
    • -t. Для потоков, если они есть.
  3. clean. Чистит html статьи от мусора, оставляя только текст. Ключи аналогично download, кроме -t.

Использовать библиотеки, отличные от тех, которые указаны на этой вики-странице (например, requests, bs4), нельзя.

Примеры:

  • Загрузка страницы семинара помощью библиотеки urllib [source].
  • Простейший парсер HTML5 (извлекает заголовок страницы семинар) [source].

Задание

  1. К следующему семинару в вас должны быть наработки по crawler-у.
  2. Изучите команды man, ls, cd, screen, echo, cat, chmod.
  3. Почитайте про http.

Материалы

Про гит
  1. Кратко о контроле версий можно прочитать здесь.
  2. Git, за или против? Можно посмотреть здесь
  3. Git Vs Mercurial и Git Vs SVN
Про Python
  1. Библиотека argparse.
  2. Что такое GIL?
  3. Многопоточность в Python - threading.
Man
  1. Что такое man?
  2. Что такое screen?

S02.03

  1. Обсудили организационные моменты.
  2. Выяснили, кто какие ресурсы собирается взять (выбор можно изменить в течение недели).
  3. Поговорили о git.
  4. Дружно попили чай ;)

Немного о crawler-e

Необходимые операции:

  1. Скачать всю статью в HTML.
  2. Распарсить статью. Почистить от всякого мусора: картинок, ссылок, прочего, оставить только текст. Если есть опыт работы с базами, то можно использовать их, в противном случае лучше не тратить время на их изучение, достаточно хранить все в обычной директории. Распарсенные статьи хранятся отдельно, у них должны быть свои индексы и нужно уметь сопоставлять этот индекс с url статьи.
  3. Добыть ссылки на все статьи.
  4. Определить свежесть статьи.
  5. Получить ссылки нановые статьи.

Задание

  1. Разобраться c гитом, подготовить вопросы.
  2. Создать репозиторий проекта в bitbucket.
  3. Оценить сложность написания crawler-а для своего ресурса, возможно, изменить его.
  4. Кто уже знает git, по желанию может уже начать писать crawler.

Материалы