Добавить в корзинуПозвонить
Найти в Дзене

Диплом на Python за неделю. Часть 2: Пишем парсер вакансий и собираем базу данных за один вечер

Итак, на календаре условный вторник, паника улеглась, пора писать код. Комиссии на защите нужно показать, что наше приложение работает с реальными данными. Значит, шаг первый - научить наш дипломный проект самостоятельно заходить на сайты с вакансиями и собирать информацию. В ИТ это называется парсингом или скрейпингом.
Сегодня мы напишем каркас нашего приложения и сделаем скрипт, который
Оглавление

Итак, на календаре условный вторник, паника улеглась, пора писать код. Комиссии на защите нужно показать, что наше приложение работает с реальными данными. Значит, шаг первый - научить наш дипломный проект самостоятельно заходить на сайты с вакансиями и собирать информацию. В ИТ это называется парсингом или скрейпингом.

Сегодня мы напишем каркас нашего приложения и сделаем скрипт, который выкачает требования к Python-разработчикам.

Шаг 1. Готовим рабочее место

Чтобы в системе не было каши из библиотек, всегда создавайте изолированную папку - виртуальное окружение. Создайте на компьютере папку diploma_project, откройте в ней терминал (консоль) и введите две команды:

# Создаем окружение

python -m venv venv

# Активируем его (для Windows)

venv\Scripts\activate

# Активируем его (для Mac/Linux)

source venv/bin/activate

Теперь ставим наш «набор выживания» - библиотеки для скачивания страниц (requests), их разбора (beautifulsoup4) и работы с таблицами (pandas):

pip install requests beautifulsoup4 pandas

Шаг 2. Пишем код парсера

Создайте файл parser.py. Мы не будем лезть под жесткие фильтры больших агрегаторов вроде hh.ru (там нужна сложная авторизация и капча, а у нас неделя до диплома). Мы возьмем сайт попроще, например, открытый хаб с вакансиями (или смоделируем его структуру).

Этот код заходит на страницу, находит блоки вакансий, вытаскивает оттуда название, навыки и сохраняет всё в аккуратную Excel-таблицу:

import requests

from bs4 import BeautifulSoup

import pandas as pd

import time

def parse_jobs(keyword, pages=3):

status_text = f"Начинаем сбор вакансий по запросу: {keyword}"

print(status_text)

scraped_data = []

# Листаем страницы сайта

for page in range(1, pages + 1):

# Заменяем URL на тестовый сайт-песочницу или реальный открытый ИТ-хаб

url = f"https://github.io"

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}

response = requests.get(url, headers=headers)

if response.status_code != 200:

print(f"Ошибка доступа к странице {page}")

continue

soup = BeautifulSoup(response.text, 'html.parser')

# Находим все карточки вакансий на странице

job_cards = soup.find_all('div', class_='card-content')

for card in job_cards:

title = card.find('h2', class_='title').text.strip()

company = card.find('h3', class_='company').text.strip()

location = card.find('p', class_='location').text.strip()

# В реальном дипломе здесь мы будем искать теги навыков (Docker, Git, Django)

# Для теста запишем базовую информацию

scraped_data.append({

"Позиция": title,

"Компания": company,

"Город": location,

"Требуемые навыки": "Python, SQL, Git" # Сюда позже прикрутим умный поиск скиллов

})

time.sleep(1) # Защита от бана: спим 1 секунду между страницами

# Превращаем массив данных в красивую таблицу Pandas

df = pd.DataFrame(scraped_data)

# Сохраняем в Excel. Это готовое приложение к вашему диплому!

df.to_csv("vacancies_base.csv", index=False, encoding="utf-8")

print(f"Готово! Собранно {len(df)} вакансий. Файл vacancies_base.csv сохранен.")

if __name__ == "__main__":

parse_jobs("Python", pages=1)

Что говорить на защите диплома про этот код?

Когда злой профессор спросит: «А в чем научная новизна и сложность вашего метода сбора?», вы уверенно отвечаете:

. «Использован модульный подход и имитация поведения реального пользователя» (это про строчку с headers и time.sleep, чтобы сайт не понял, что это робот).

. «Данные нормализуются на лету» (это про метод .strip(), который удаляет лишний мусор и пробелы из текста).

. «Была сформирована первичная неструктурированная база данных для последующего контент-анализа» (звучит по-научному круто, а на деле означает, что мы просто сохранили текст в CSV-файл).

Запустите скрипт командой python parser.py. В вашей папке появится файл vacancies_base.csv. Поздравляю, у вас есть первая практическая часть диплома и реальная база данных, собранная программным путем.

В следующей серии мы сделаем самое интересное: заставим Python проанализировать этот файл, вытащить оттуда самые востребованные технологии и построить красивейшие графики для презентации, от которых у комиссии потекут слезы умиления.