requests
и BeautifulSoup
данные с html-страницы. В каком формате сохранять данные на предварительном этапе (список списков, кортежей, словарь, совершенно не важно).pandas
. Присвоить столбцам таблицы внятные названия. При необходимости преобразовать типы данных в столбцах (чтобы числовые данные имели формат float
или integer
). Если в таблице присутствует "мусор", отфильтровать ненужные строки.html-<>.csv
, где вместо <>
вставить свою фамилию.Вариант 1 (на 9)
Список курсов образовательной программы "Прикладная политология". Ссылки на страницы 1, 2 (так как все курсы не умещаются на одной). Каждая строка в итоговом датафрейме должна соответствовать одному курсу. В таблице должно быть 4 столбца: название курса, ссылка на страницу курса, статус курса (обязательный, по выбору и проч.), язык курса.
Вариант 2 (на 10)
Данные по Международному индексу счастья и его компонент за 2012 год. Ссылка на страницу. Каждая строка в итоговом датафрейме должна соответствовать одной стране. В таблице должно быть 5 столбцов: название страны, HPI, Удовлетворенность жизнью, Ожидаемая продолжительность жизни, Экологический след.
Подсказки
Фрагмент кода, показанный на семинаре (для курсов):
import requests
from bs4 import BeautifulSoup
url = "https://www.hse.ru/ma/ps/courses"
page = requests.get(url)
page
<Response [200]>
soup = BeautifulSoup(page.text, 'lxml')
soup.find_all('div', {'class' : 'edu-events_title title large'})
[<div class="edu-events_title title large"><a class="link link_dark" href="https://www.hse.ru/ma/ps/courses/219892242.html">Анализ нормативно-правовых актов и основы законотворчества</a></div>, <div class="edu-events_title title large"><a class="link link_dark" href="https://www.hse.ru/ma/ps/courses/219875476.html">Взаимодействие с органами государственной власти: GR менеджмент</a></div>, <div class="edu-events_title title large"><a class="link link_dark" href="https://www.hse.ru/ma/ps/courses/219883247.html">State and Economy</a></div>, <div class="edu-events_title title large"><a class="link link_dark" href="https://www.hse.ru/ma/ps/courses/219890240.html">Институты и практики российской политики в сравнительной перспективе</a></div>, <div class="edu-events_title title large"><a class="link link_dark" href="https://www.hse.ru/ma/ps/courses/219900088.html">Математика</a></div>, <div class="edu-events_title title large"><a class="link link_dark" href="https://www.hse.ru/ma/ps/courses/219868999.html">Методология и методы политических исследований</a></div>, <div class="edu-events_title title large"><a class="link link_dark" href="https://www.hse.ru/ma/ps/courses/219869003.html">Methodology and Research Methods of Political Science</a></div>, <div class="edu-events_title title large"><a class="link link_dark" href="https://www.hse.ru/ma/ps/courses/219874683.html">Методы анализа неоднородных данных</a></div>, <div class="edu-events_title title large"><a class="link link_dark" href="https://www.hse.ru/ma/ps/courses/219865762.html">Методы машинного обучения</a></div>, <div class="edu-events_title title large"><a class="link link_dark" href="https://www.hse.ru/ma/ps/courses/219883047.html">Мониторинг общественного мнения: данные и анализ</a></div>, <div class="edu-events_title title large"><a class="link link_dark" href="https://www.hse.ru/ma/ps/courses/219903231.html">Научно-исследовательский семинар</a></div>, <div class="edu-events_title title large"><a class="link link_dark" href="https://www.hse.ru/ma/ps/courses/219903239.html">Научно-исследовательский семинар</a></div>, <div class="edu-events_title title large"><a class="link link_dark" href="https://www.hse.ru/ma/ps/courses/219887668.html">Политическая наука</a></div>, <div class="edu-events_title title large"><a class="link link_dark" href="https://www.hse.ru/ma/ps/courses/219890797.html">Политические режимы и избирательные кампании в регионах Российской Федерации</a></div>, <div class="edu-events_title title large"><a class="link link_dark" href="https://www.hse.ru/ma/ps/courses/219907502.html">Политический менеджмент</a></div>, <div class="edu-events_title title large"><a class="link link_dark" href="https://www.hse.ru/ma/ps/courses/219887376.html">Политическое письмо</a></div>, <div class="edu-events_title title large"><a class="link link_dark" href="https://www.hse.ru/ma/ps/courses/219887380.html">Политическое письмо</a></div>, <div class="edu-events_title title large"><a class="link link_dark" href="https://www.hse.ru/ma/ps/courses/219878438.html">Приложения теории игр в политическом анализе</a></div>, <div class="edu-events_title title large"><a class="link link_dark" href="https://www.hse.ru/ma/ps/courses/219861594.html">Принятие государственных решений в РФ</a></div>, <div class="edu-events_title title large"><a class="link link_dark" href="https://www.hse.ru/ma/ps/courses/219861598.html">Принятие государственных решений в РФ</a></div>]
links = soup.find_all('div', {'class' : 'edu-events_title title large'})
[i.text for i in links]
['Анализ нормативно-правовых актов и основы законотворчества', 'Взаимодействие с органами государственной власти: GR менеджмент', 'State and Economy', 'Институты и практики российской политики в сравнительной перспективе', 'Математика', 'Методология и методы политических исследований', 'Methodology and Research Methods of Political Science', 'Методы анализа неоднородных данных', 'Методы машинного обучения', 'Мониторинг общественного мнения: данные и анализ', 'Научно-исследовательский семинар', 'Научно-исследовательский семинар', 'Политическая наука', 'Политические режимы и избирательные кампании в регионах Российской Федерации', 'Политический менеджмент', 'Политическое письмо', 'Политическое письмо', 'Приложения теории игр в политическом анализе', 'Принятие государственных решений в РФ', 'Принятие государственных решений в РФ']
Фрагмент кода для варианта с Индексом счастья:
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"
page2 = requests.get(url2)
soup2 = BeautifulSoup(page2.text, 'lxml')
# soup2.find_all('table')[3] - уберите #, чтобы увидеть результат
soup2.find_all('table')[3].find_all('td')[1]
<td align="left"><span class="noprint" style="display: none; speak: none;">Коста-Рика</span><span class="nowrap"><span class="flagicon"><a href="/wiki/%D0%9A%D0%BE%D1%81%D1%82%D0%B0-%D0%A0%D0%B8%D0%BA%D0%B0" title="Коста-Рика"><img alt="Flag of Costa Rica (state).svg" class="thumbborder" data-file-height="500" data-file-width="833" height="13" src="//upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Flag_of_Costa_Rica_%28state%29.svg/22px-Flag_of_Costa_Rica_%28state%29.svg.png" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Flag_of_Costa_Rica_%28state%29.svg/33px-Flag_of_Costa_Rica_%28state%29.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Flag_of_Costa_Rica_%28state%29.svg/44px-Flag_of_Costa_Rica_%28state%29.svg.png 2x" width="22"/></a></span> <a href="/wiki/%D0%9A%D0%BE%D1%81%D1%82%D0%B0-%D0%A0%D0%B8%D0%BA%D0%B0" title="Коста-Рика"><span class="wrap">Коста-Рика</span></a></span></td>