{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Программирование для всех\n", "\n", "*Алла Тамбовцева*\n", "\n", "## Домашнее задание 4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1. Сгрузить с помощью библиотек `requests` и `BeautifulSoup` данные с html-страницы. В каком формате сохранять данные на предварительном этапе (список списков, кортежей, словарь, совершенно не важно).\n", "2. Сохранить сгруженные данные в формате датафрейма `pandas`. Присвоить столбцам таблицы внятные названия. При необходимости преобразовать типы данных в столбцах (чтобы числовые данные имели формат `float` или `integer`). Если в таблице присутствует \"мусор\", отфильтровать ненужные строки.\n", "3. Выгрузить получившийся датафрейм в csv-файл, назвать `html-<>.csv`, где вместо `<>` вставить свою фамилию.\n", "4. Загрузить ipynb-файл с кодом и полученный csv-файл [сюда](https://www.dropbox.com/request/6Bx4hJY6KqxUg7YlmPrA), на Dropbox." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Вариант 1 (на 9)**\n", "\n", "Список курсов образовательной программы \"Прикладная политология\". Ссылки на страницы [1](https://www.hse.ru/ma/ps/courses), [2](https://www.hse.ru/ma/ps/courses/page2.html?year=2018) (так как все курсы не умещаются на одной). Каждая строка в итоговом датафрейме должна соответствовать одному курсу. В таблице должно быть 4 столбца: название курса, ссылка на страницу курса, статус курса (обязательный, по выбору и проч.), язык курса.\n", "\n", "**Вариант 2 (на 10)**\n", "\n", "Данные по Международному индексу счастья и его компонент за 2012 год. [Ссылка](https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B6%D0%B4%D1%83%D0%BD%D0%B0%D1%80%D0%BE%D0%B4%D0%BD%D1%8B%D0%B9_%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81_%D1%81%D1%87%D0%B0%D1%81%D1%82%D1%8C%D1%8F) на страницу. Каждая строка в итоговом датафрейме должна соответствовать одной стране. В таблице должно быть 5 столбцов: название страны, HPI, Удовлетворенность жизнью, Ожидаемая продолжительность жизни, Экологический след." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Подсказки* \n", "\n", "Фрагмент кода, показанный на семинаре (для курсов):" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import requests" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from bs4 import BeautifulSoup" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "url = \"https://www.hse.ru/ma/ps/courses\"" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "page = requests.get(url)\n", "page" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "soup = BeautifulSoup(page.text, 'lxml')" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[
Анализ нормативно-правовых актов и основы законотворчества
,\n", "
Взаимодействие с органами государственной власти: GR менеджмент
,\n", "
State and Economy
,\n", "
Институты и практики российской политики в сравнительной перспективе
,\n", "
Математика
,\n", "
Методология и методы политических исследований
,\n", "
Methodology and Research Methods of Political Science
,\n", "
Методы анализа неоднородных данных
,\n", "
Методы машинного обучения
,\n", "
Мониторинг общественного мнения: данные и анализ
,\n", "
Научно-исследовательский семинар
,\n", "
Научно-исследовательский семинар
,\n", "
Политическая наука
,\n", "
Политические режимы и избирательные кампании в регионах Российской Федерации
,\n", "
Политический менеджмент
,\n", "
Политическое письмо
,\n", "
Политическое письмо
,\n", "
Приложения теории игр в политическом анализе
,\n", "
Принятие государственных решений в РФ
,\n", "
Принятие государственных решений в РФ
]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "soup.find_all('div', {'class' : 'edu-events_title title large'})" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['Анализ нормативно-правовых актов и основы законотворчества',\n", " 'Взаимодействие с органами государственной власти: GR менеджмент',\n", " 'State and Economy',\n", " 'Институты и практики российской политики в сравнительной перспективе',\n", " 'Математика',\n", " 'Методология и методы политических исследований',\n", " 'Methodology and Research Methods of Political Science',\n", " 'Методы анализа неоднородных данных',\n", " 'Методы машинного обучения',\n", " 'Мониторинг общественного мнения: данные и анализ',\n", " 'Научно-исследовательский семинар',\n", " 'Научно-исследовательский семинар',\n", " 'Политическая наука',\n", " 'Политические режимы и избирательные кампании в регионах Российской Федерации',\n", " 'Политический менеджмент',\n", " 'Политическое письмо',\n", " 'Политическое письмо',\n", " 'Приложения теории игр в политическом анализе',\n", " 'Принятие государственных решений в РФ',\n", " 'Принятие государственных решений в РФ']" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "links = soup.find_all('div', {'class' : 'edu-events_title title large'})\n", "[i.text for i in links]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Фрагмент кода для варианта с Индексом счастья:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "url2 = \"https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B6%D0%B4%D1%83%D0%BD%D0%B0%D1%80%D0%BE%D0%B4%D0%BD%D1%8B%D0%B9_%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81_%D1%81%D1%87%D0%B0%D1%81%D1%82%D1%8C%D1%8F\"" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "page2 = requests.get(url2)\n", "soup2 = BeautifulSoup(page2.text, 'lxml')" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "# soup2.find_all('table')[3] - уберите #, чтобы увидеть результат" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Коста-Рика\"Flag Коста-Рика" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "soup2.find_all('table')[3].find_all('td')[1]" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.5" } }, "nbformat": 4, "nbformat_minor": 2 }