Рубрики
Без рубрики

Как я использовал Python, чтобы помочь мне выбрать организацию для Google лето Кода ’19

Автор оригинала: FreeCodeCapm Team.

Vaibhav Gupta

В этом руководстве я буду использовать Python, чтобы соскрести данные из Google Summer of Code (GSOC) архив о участвующих организациях с 2009 года.

Моя мотивация за этим проектом

Хотя я прокрутил огромный список организаций, которые участвовали в GSOC’18, я понял, что изучение организации – это повторяющаяся задача – выберите один, исследуйте свои проекты, убедитесь, что если он участвовал в предыдущих годах или нет. Но есть 200+ организаций, и продвигается через них все займет много времени. Итак, будучи ленивым человеком, я решил использовать Python, чтобы облегчить мою работу

Требования

  • Python (я буду использовать python3.6, потому что f-струны потрясающие?)
  • Пипенв (для виртуальной среды)
  • Запросы (для получения веб-страницы)
  • Красивый суп 4 (для извлечения данных с веб-страниц)

Создание нашего скрипта

Это веб-страницы, которые мы собираемся соскребать:

  1. На 2009-2015 годы: Ссылка на сайт
  2. За 2015-2018 годы: Ссылка на сайт

Часть кодирования

Шаг 1: Настройка виртуальной среды и установка зависимостей

Виртуальский Может использоваться для создания виртуальной среды, но я бы порекомендовал использовать Пипенв потому что Он минимизирует работу и поддерживает Pipfile и Pipfile.lock Отказ

Сделайте новую папку и введите следующую серию команд в терминале:

pip install pipenv

Затем создайте виртуальную среду и установите все зависимости только с одной командой (Pipenv Rocks?):

pipenv install requests beautifulsoup4 --three

Вышеуказанная команда выполнит следующие задачи:

  • Создайте виртуальную среду (для Python3).
  • Установить Запросы и б eautifulsoup4.
  • Создать Pipfile и Pipfile.lock в той же папке.

Теперь активируйте виртуальную среду:

pipenv shell

Обратите внимание на название папки до $ После активации, как это:

(gsoc19) $

Шаг 2: Скрепление данных на 2009-2015 годы

Откройте любой код кода и сделайте новый файл Python (я назову его 2009-2015.py ). Веб-страница содержит ссылки для списка организаций каждого года. Во-первых, напишите утилиту в отдельном файле Utils.py который получит насильюю веб-страницы и поднимет Исключение Если есть ошибка подключения.

Теперь получите ссылку веб-страницы, которая содержит список организаций на каждый год.

Для этого создайте функцию get_year_with_link Отказ Перед записью функции нам нужно немного осмотреть эту веб-страницу. Щелкните правой кнопкой мыши любой год и нажмите на Проверять Отказ

Обратите внимание, что есть < ul> tag, и внутри него, ther ER E

  • Теги, каждый из которых CONTA ins t; Тег с классом MDL-List__IT EM-первичный контент, внутри которого является наша ссылка и год. Кроме того, обратите внимание, что этот шаблон такой же для каждого года. Мы хотим схватить эти данные.
  • Задачи, выполняемые этой функцией, находятся в этом порядке:

    1. Получить Main_page Поднимите исключение, если есть ошибка подключения.
    2. Если код ответа является 200 ОК Разбейте избранную веб-страницу с красивыми. И если код ответа – что-то еще, выйдите из программы.
    3. Найти все < Li> Теги с Класс MDL-List__ ITem MDL-List__ITem - на E-line и хранить возвращенные Li ул в ye ARS_LI.
    4. Инициализировать пустую jady_dict Словарь.
    5. Начните итерацию по годы_ли список.
    6. Получить текст год (2009, 2010, 2011, …), удалить все \ N и храните его в Год Отказ
    7. Получите относительную ссылку каждого года (//archive/gsoc/2015,/archive/gsoc/2016, …) и храните его в Relatent_Link Отказ
    8. Конвертировать Relatent_Link в полную ссылку, сочетая ее с Home_page Ссылка и храните его в full_link Отказ
    9. Добавьте эти данные в ж/dict Словарь с годом как ключ и full_link как его ценность.
    10. Повторите это на все годы.

    Это даст нам словарь с годами в качестве клавиш и их ссылки в качестве значений в этом формате:

    {  ...  '2009': 'https://www.google-melange.com/archive/gsoc/2009',  '2010': 'https://www.google-melange.com/archive/gsoc/2010',  ...}

    Теперь мы хотим посетить эти ссылки и получить имя каждой организации со своими ссылками с этих страниц. Щелкните правой кнопкой мыши любое имя ORG и нажмите Проверять Отказ

    Обратите внимание, что есть < ul> метка с Класс MD l-list, whic H HA S

  • Теги С классом MDL-List__ ITem MDL-List__ite М – одна строка. Внутри каждого TH ERE тег, который имеет ссылку и имя организации. Мы хотим схватить это. Для этого давайте создадим Другая функция get_organizatio NS_LIST_WITH_LINKS, которые принимают ссылки на веб-страницы, которые содержат список организаций для каждого года (wh ichic мы выскабливаем get_year_with_link).
  • Задачи, выполняемые этой функцией, находятся в этом порядке:

    1. Получите страницу списка ORG, ( https://www.google-melange.com/archive/gsoc/2015 , https://www.google-melange.com/archive/gsoc/201 6, ….) Поднимите исключение, если есть ошибка соединения.
    2. Если код ответа является 200 ОК Разбейте избранную веб-страницу с красивыми. И если код ответа – что-то еще, выйдите из программы.
    3. Найти все < Li> Теги с Класс MDL-List__ ITem MDL-List__ITem - на E-line и хранить возвращенные Li ST в O RGS_LI.
    4. Инициализировать пустую orgs_dict Словарь.
    5. Начните итерацию по orgs_li список.
    6. Получите имя ORG, удалите все \ N и храните его в org_name Отказ
    7. Получите относительную ссылку каждого ORG (/Archive/GSOC/2015/ORGS/N52/Archive/GSOC/2015/ORGS/Beagleboard, …) И храните его в Relatent_Link Отказ
    8. Конвертировать Relatent_Link в полную ссылку, сочетая ее с Home_page Ссылка и храните его в full_link Отказ
    9. Добавьте эти данные в orgs_dict с org_name как ключ и full_link как его ценность.
    10. Повторите это для всех организаций на определенный год.

    Это даст нам словарь с именами организаций как ключи и их ссылки в качестве ценностей, как это:

    {  ...  'ASCEND': 'https://www.google-melange.com/archive/gsoc/2015/orgs/ascend',
    'Apache Software Foundation': 'https://www.google-melange.com/archive/gsoc/2015/orgs/apache',  ...}

    Перемещение вперед, мы хотим посетить эти ссылки и получить название, описание и связь каждого проекта каждого ORG для каждого года (?). Щелкните правой кнопкой мыши на заголовке любого проекта и нажмите I охватывать.

    Опять же, та же рисунок. Есть < ul> метка с Класс MD l-list, который содержит S-й E

  • Теги С классом MDL-List__ ITem MDL-List__ite м – две линии, внутри которой Там Whi CH содержит тег , содержащий наш проект название. Кроме того, есть n Теги с Класс MDL-List__ITEM-подпункта, содержащий описание проекта Отказ Для этого создайте Функция get_org_projects_info, чтобы выполнить эту задачу.
  • Задачи, выполняемые этой функцией, находятся в этом порядке:

    1. Получите страницу описания ORG, ( https://www.google-melange.com/archive/gsoc/2015/orgs/archive/gsoc/2015/orgs://www.google-melange.com/archive/gsoc/2015/orgs/apache , ….), Поднимите исключение, если есть ошибка подключения. Если код ответа является 200 ОК
    2. Разбейте избранную веб-страницу с красивыми. И если код ответа – что-то еще, выйдите из программы. Найти все <
    3. Li> Теги с классом повыше AL в MDL-List__ITem MDL-List__ITem - TW O-Line и хранить возвращенные Li ST в Proje cts_li. Инициализировать пустую projects_info
    4. список. Начните итерацию по projects_li
    5. список. Инициализировать пустой словарь proj_info
    6. в каждой петле. Получите заголовок проекта, удалите все \ N
    7. и храните его в proj_title Отказ Получите относительную ссылку каждого проекта ( https://www.google-melange.com/archive/gsoc/2015/orgs/apache/projects/djkevincr.html
    8. , ….) И храните его в proj_relative_link Отказ Конвертировать proj_relative_link
    9. в полную ссылку, сочетая ее с Home_page Ссылка и храните его в proj_full_link Отказ Храните название проекта, описание и ссылку в proj_info
    10. Словарь и добавить этот словарь на projects_info список.

    Это даст нам список, содержащий словари с данными проекта.

    [  ...  {    'title': 'Project Title 1',    'description': 'Project Description 1',    'link': 'http://project-1-link.com/',  },  {    'title': 'Project Title 2',    'description': 'Project Description 2',    'link': 'http://project-2-link.com/',  }  ...]

    Шаг 3: Реализация основной функции

    Давайте сначала посмотрим код:

    Задачи, выполняемые этой функцией, находятся в этом порядке:

    1. Мы хотим иметь Final_dict словарь, чтобы мы могли сохранить его как .json файл.
    2. Тогда мы называем нашу функцию get_year_with_link () , который вернет словарь с годами в качестве клавиш и ссылки на список организаций как ценности и хранить его в jug_with_link Отказ
    3. Мы переиграем над словаре jug_with_link Отказ
    4. За каждый год мы называем функцию get_organizations_list_with_links () С помощью ссылки для него в качестве параметра, которая вернет словарь с именем организаций в качестве клавиш и ссылки на веб-страницу, содержащую информацию о них в качестве значений. Мы храним возвращаемая стоимость в Final_dict , с Год как ключи.
    5. Затем мы переживаем каждый огрупп каждый год.
    6. Для каждого ORG мы называем функцию get_org_projects_info () Со ссылкой на ORG в качестве параметра, который вернет список словарей, содержащих информацию о каждой проекте.
    7. Мы храним эти данные в Final_dict Отказ
    8. После окончания цикла у нас будет Final_dict Словарь следующим образом:
    {    "2009": {        "Org 1": [            {                "title": "Project - 1",                "description": "Project-1-Description",                "link": "http://project-1-link.com/"            },            {                "title": "Project - 2",                "description": "Project-2-Description",                "link": "http://project-2-link.com/"            }        ],        "Org 2": [            {                "title": "Project - 1",                "description": "Project-1-Description",                "link": "http://project-1-link.com/"            },            {                "title": "Project - 2",                "description": "Project-2-Description",                "link": "http://project-2-link.com/"            }        ]    },    "2010": {        ...    }}

    9. Тогда мы сохраним его как JSON файл с json.dumps .? ?

    Следующие шаги

    Данные за 2016-2018 годы могут быть соскрешены аналогичным образом. А затем Python (или любой подходящий язык) можно использовать для анализа данных. Или веб-приложение может быть сделано. На самом деле, я уже сделал мою версию WebApp, используя Джанго , Django Rest Framework и Rectjs Отказ Вот ссылка на то же самое: https://gsoc-data-analyzer.netlify.com/

    Улучшения

    Время работы скрипта может быть улучшено с помощью многопотативного. В настоящее время он выбирает одну ссылку одновременно, его можно сделать, чтобы привлечь несколько ссылок одновременно.

    Обо мне

    Всем привет.

    Я Вайбхав Гупта студенческий студент в Индийский институт информационных технологий, Лакхнау Отказ Я люблю python и js.

    Смотри мой портфель Или найди меня на Facebook , LinkedIn или Github Отказ