{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Web-scraping: сбор данных из баз данных и интернет-источников\n", "\n", "*Алла Тамбовцева, НИУ ВШЭ*\n", "\n", "## Семинар 1. Структуры данных Python\n", "\n", "### Задача 1\n", "\n", "Дан список `links` с ссылками на веб-страницы:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "links = [\"/rubric/astronomy\", \n", " \"/rubric/physics\", \n", " \"/rubric/biology\",\n", " \"/theme/bookshelf\",\n", " \"/theme/Courses\",\n", " \"/news/2022/02/03/argas-brumpti\",\n", " \"/news/2022/02/02/violent-video-games\",\n", " \"/news/2022/02/02/CART-10years\",\n", " \"/news/2022/02/02/cruise-sf\",\n", " \"/news/2022/02/02/ba2-russia\",\n", " \"/news/2022/02/02/Schwinger-monopoles\",\n", " \"/news/2022/02/02/hydrohalogenation-chain-walking\",\n", " \"/material/2022/01/21/tonga\",\n", " \"/blog/2022/02/01/lower-than-zero\",\n", " \"/blog/2022/01/28/covid-symptoms\",\n", " \"/news/2022/02/01/immunomagnetic-sorting\",\n", " \"/news/2022/02/01/second-earth-trojan\"]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "a. Выберите из списка первую, третью и последнюю ссылку и выведите их на экран.\n", "\n", "b. Используя список `links`, создайте новый список `news` со ссылками на новости, то есть только с теми ссылками, которые содержат слово `news`. Сколько элементов в полученном списке?\n", "\n", "c. Приведённые в списке `links` ссылки – относительные, они ссылаются на страницу в пределах некоторой папки на сервере, но не позволяют пользователю её открыть. Создайте новый список `full` с абсолютными ссылками, доклеив к каждому элементу списка `links` ссылку на сам сайт `https://nplus1.ru`. Проверьте, что все ссылки рабочие." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/rubric/astronomy /rubric/biology /news/2022/02/01/second-earth-trojan\n" ] } ], "source": [ "# a\n", "\n", "print(links[0], links[2], links[-1])" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['/news/2022/02/03/argas-brumpti', '/news/2022/02/02/violent-video-games', '/news/2022/02/02/CART-10years', '/news/2022/02/02/cruise-sf', '/news/2022/02/02/ba2-russia', '/news/2022/02/02/Schwinger-monopoles', '/news/2022/02/02/hydrohalogenation-chain-walking', '/news/2022/02/01/immunomagnetic-sorting', '/news/2022/02/01/second-earth-trojan']\n" ] } ], "source": [ "# b\n", "\n", "news = []\n", "for link in links:\n", " if \"news\" in link:\n", " news.append(link)\n", "print(news)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['https://nplus1.ru/rubric/astronomy', 'https://nplus1.ru/rubric/physics', 'https://nplus1.ru/rubric/biology', 'https://nplus1.ru/theme/bookshelf', 'https://nplus1.ru/theme/Courses', 'https://nplus1.ru/news/2022/02/03/argas-brumpti', 'https://nplus1.ru/news/2022/02/02/violent-video-games', 'https://nplus1.ru/news/2022/02/02/CART-10years', 'https://nplus1.ru/news/2022/02/02/cruise-sf', 'https://nplus1.ru/news/2022/02/02/ba2-russia', 'https://nplus1.ru/news/2022/02/02/Schwinger-monopoles', 'https://nplus1.ru/news/2022/02/02/hydrohalogenation-chain-walking', 'https://nplus1.ru/material/2022/01/21/tonga', 'https://nplus1.ru/blog/2022/02/01/lower-than-zero', 'https://nplus1.ru/blog/2022/01/28/covid-symptoms', 'https://nplus1.ru/news/2022/02/01/immunomagnetic-sorting', 'https://nplus1.ru/news/2022/02/01/second-earth-trojan']\n" ] } ], "source": [ "# c\n", "\n", "full = []\n", "for link in links:\n", " new = \"https://nplus1.ru\" + link\n", " full.append(new)\n", "print(full)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "https://nplus1.ru/rubric/astronomy\n", "https://nplus1.ru/rubric/physics\n", "https://nplus1.ru/rubric/biology\n", "https://nplus1.ru/theme/bookshelf\n", "https://nplus1.ru/theme/Courses\n", "https://nplus1.ru/news/2022/02/03/argas-brumpti\n", "https://nplus1.ru/news/2022/02/02/violent-video-games\n", "https://nplus1.ru/news/2022/02/02/CART-10years\n", "https://nplus1.ru/news/2022/02/02/cruise-sf\n", "https://nplus1.ru/news/2022/02/02/ba2-russia\n", "https://nplus1.ru/news/2022/02/02/Schwinger-monopoles\n", "https://nplus1.ru/news/2022/02/02/hydrohalogenation-chain-walking\n", "https://nplus1.ru/material/2022/01/21/tonga\n", "https://nplus1.ru/blog/2022/02/01/lower-than-zero\n", "https://nplus1.ru/blog/2022/01/28/covid-symptoms\n", "https://nplus1.ru/news/2022/02/01/immunomagnetic-sorting\n", "https://nplus1.ru/news/2022/02/01/second-earth-trojan\n" ] } ], "source": [ "# выводим в кликабельном виде (внутри Jupyter)\n", "\n", "for i in full:\n", " print(i)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 2\n", "\n", "В списке `L` сохранены короткие тексты с датой в начале и именем автора в конце:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "L = [\"\"\"02/02/2022 Исследователи провели эксперимент при участии \n", " группы студентов и обнаружили долгосрочное снижение эмпатии \n", " у часто играющих в жестокие видеоигры людей и кратковременное \n", " уменьшение эмоциональной реакции на болезненные изображения \n", " после 40 минут игры у тех, кто ранее не играл в жестокие игры. Автор: Алиса Родина\"\"\", \n", " \"\"\"\n", " 03/02/2022 Африканские клещи Argas brumpti могут дожить до 27 лет — к такому \n", " выводу пришел американский исследователь Джулиан Шеперд, который \n", " держит этих членистоногих в лаборатории с 1976 года. По его словам, \n", " ни один другой вид клещей не может похвастать таким долголетием. Автор: Сергей Коленов\n", " \"\"\",\n", " \"\"\"\n", " 02/02/2022 Американская компания Cruise запустит в Сан-Франциско сервис \n", " полностью беспилотного такси. Компания начала сбор заявок от людей, \n", " не работающих в компании, и рассказала, что поначалу он будет бесплатным \n", " и сможет возить пассажиров лишь ночью — с 11 часов вечера до 5 часов утра. Автор: Григорий Копиев\n", " \"\"\"]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Создайте три новых списка:\n", "\n", "* список `authors`, который содержит только авторов текстов;\n", "\n", "* список `dates`, который содержит даты;\n", "\n", "* список `texts`, который содержит сами тексты." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "authors = []\n", "dates = []\n", "texts = []\n", "\n", "for text in L:\n", " date = text.split()[0]\n", " author = \" \".join(text.split()[-2:])\n", " news = \" \".join(text.split()[1:-2])\n", " authors.append(author)\n", " dates.append(date)\n", " texts.append(news)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 3\n", "\n", "Дан список словарей, содержащий характеристики постов со стены сообщества ВКонтакте:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "L = [{'id': 53050,\n", " 'text': 'В рамках проекта «Социальный лифт» Вышка предоставляет льготы при поступлении абитуриентам, оказавшимся в сложных жизненных обстоятельствах и социально-экономических условиях. В 2019 году льготу получил 71 человек, а в этом году университет готов оказать поддержку уже 165 абитуриентам.\\n\\nМы поговорили с ребятами, поступившими по программе, и делимся их историями в новом видео.\\n\\nПодробнее об условиях участия, сроках и количестве мест можно прочитать по ссылке: r.hse.ru/lift',\n", " 'likes': {'count': 56, 'user_likes': 0, 'can_like': 1, 'can_publish': 1},\n", " 'views': {'count': 14370}},\n", " {'id': 53163,\n", " 'text': 'Даже в самом загруженном расписании стоит оставить немного места для заботы о себе. «Вышка для своих» делится мартовской подборкой мероприятий [club6222726|Центра психологического консультирования ВШЭ]: от хатха-йоги до групповых кинопросмотров',\n", " 'likes': {'count': 6, 'user_likes': 0, 'can_like': 1, 'can_publish': 1},\n", " 'views': {'count': 2460}},\n", " {'id': 53161,\n", " 'text': 'Начался прием заявок на соискание премии HSE Alumni Awards. 19 марта стартует открытое онлайн-голосование, которое определит шорт-листы по каждой номинации. Лауреатами премии могут стать выпускники всех кампусов Вышки.\\n\\nЗаявки принимаются до 15 марта на сайте премии: bit.ly/2TzuxXn',\n", " 'likes': {'count': 4, 'user_likes': 0, 'can_like': 1, 'can_publish': 1},\n", " 'views': {'count': 2144}},\n", " {'id': 53159,\n", " 'text': 'Вышка заняла первое место среди российских вузов по десяти предметам в рейтинге QS World University Rankings by Faculty & Subject 2020. Всего университет представлен в 19 предметных рейтингах, а по пяти из них входит в топ-100 глобального списка.\\n\\nВ этом году ВШЭ также присутствует в 4 из 5 отраслей QS, в том числе впервые в «Естественных науках»',\n", " 'likes': {'count': 90, 'user_likes': 0, 'can_like': 1, 'can_publish': 1},\n", " 'views': {'count': 7136}},\n", " {'id': 53136,\n", " 'text': 'Почему изучать космос сложно, но интересно, для чего нужно наблюдать за геокороной Земли и как вернуть престиж профессии учёного? Рассказывает преподаватель факультета физики ВШЭ Игорь Балюкин, победитель конкурса ИКИ РАН в номинации «Лучшая работа, выполненная молодыми учеными»',\n", " 'likes': {'count': 15, 'user_likes': 0, 'can_like': 1, 'can_publish': 1},\n", " 'views': {'count': 4255}},\n", " {'id': 53133,\n", " 'text': 'В феврале и начале марта сотрудники Вышки провели заключительный этап олимпиады [club154631231|«Я — профессионал»] по восьми направлениям. В соревнованиях приняли участие более 1600 студентов из 65 регионов и 212 вузов',\n", " 'likes': {'count': 4, 'user_likes': 0, 'can_like': 1, 'can_publish': 1},\n", " 'views': {'count': 3266}},\n", " {'id': 53132,\n", " 'text': 'В первый день весны на краешке Москвы прошёл зимний спортивный фестиваль [club35314658|HSE SNOW FEST], в котором приняли участие 460 человек. Горячий чай с блинами, квесты, соревнования по горным лыжам и сноуборду ждали студентов, преподавателей и выпускников Вышки',\n", " 'likes': {'count': 76, 'user_likes': 0, 'can_like': 1, 'can_publish': 1},\n", " 'views': {'count': 6847}},\n", " {'id': 53130,\n", " 'text': 'Команда [club24893373|МИЭФ] и сборная Вышки заняли первое и второе места на российском этапе «инвестиционной олимпиады» CFA Institute Research Challenge. В апреле студенты отправятся на европейский финал в Иорданию, а в случае успеха — в Нью-Йорк на глобальный финал конкурса',\n", " 'likes': {'count': 23, 'user_likes': 0, 'can_like': 1, 'can_publish': 1},\n", " 'views': {'count': 4376}}]\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "a. Выберите второй элемент списка, извлеките из него id поста, текст поста, число просмотров и лайков, а затем сохраните полученные значения в отдельные переменные `id`, `text`, `views` и `likes`.\n", "\n", "b. Напишите функцию `get_info()`, которая принимает на вход id поста, а возвращает список следующих его характеристик: текст поста, число просмотров, число лайков." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "# a\n", "\n", "id_ = L[1][\"id\"]\n", "text = L[1][\"text\"]\n", "views = L[1][\"views\"][\"count\"]\n", "likes = L[1][\"likes\"][\"count\"]" ] } ], "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.7.4" } }, "nbformat": 4, "nbformat_minor": 2 }