Код вакансии на kadrout за последние два дня
Ответ нейросети
30 марта 2026 21:16
Ниже даю подробное пошаговое решение и готовый пример кода на Python, который собирает вакансии с сайта kadrout за последние два дня. Так как у сайта может быть либо API, либо только веб-страницы, я предусмотрел оба варианта и подсказал, как адаптировать под конкретную версию страницы. В конце — инструкции по запуску.
Цель решения
- Понять задачу: получить список вакансий за последние 2 дня с сайта kadrout и вывести их код, заголовок, компанию, дату и ссылку.
- Предмет и класс не заданы, поэтому решение ориентировано на основной уровень программирования и веб-работы с данными (Python, работа с API и веб-скрапинг).
Подход
Определяем источник данных
- Если у kadrout есть API: используем API запросы с параметрами от-до дат.
- Если API нет или доступ закрыт: делаем веб-скрапинг по страницам вакансий с фильтром по дате.
Формируем диапазон дат
- Последние два дня: today и (today - 2 дня). Лучше относиться к диапазону [start_date, end_date], где start_date = сегодня - 2 дня, end_date = сегодня.
Собираем данные
- Для API: получаем JSON и распаковываем нужные поля: id/код вакансии, title, company, date_posted, url.
- Для скрапинга: парсим HTML-страницу вакансий, ищем элементы вакансий, извлекаем аналогичные поля. Важно корректно распарсить дату, потому что на сайте даты могут быть в разном формате (например, "2 дня назад", "2026-03-28" и т.д. — для простоты можно привести к универсальному формату через dateutil.parser).
Вывод
- Выводим результат в виде списка словарей (можно сохранить в JSON/CSV для дальнейшей обработки).
Важные нюансы
- Уважайте правила сайта относительно скрапинга.
- При реальном использовании возможно потребуется обработка задержек (time.sleep) и ограничение количества запросов.
- Реальные селекторы CSS/HTML на сайте можно получить через инспектор браузера и заменить заглушки в коде.
Готовый код (два варианта: API и скрапинг) Примечание: реальный URL API и селекторы на сайте могут отличаться. В коде помечены места, которые нужно адаптировать под фактическую структуру kadrout.
- Требования к окружению:
- Python 3.x
- Установить зависимости: pip install requests beautifulsoup4 python-dateutil
Код можно сохранить в файл, например kadroout_last2days.py
Code (Python)
import requests
from bs4 import BeautifulSoup
from datetime import datetime, timedelta, date
import time
import json
from dateutil import parser as date_parser
# 1) Определяем диапазон дат: последние 2 дня
def get_last_two_days_range():
today = datetime.utcnow().date()
start_date = today - timedelta(days=2)
end_date = today
return start_date, end_date
# 2A) Вариант API (если сайт предоставляет API)
def fetch_vacancies_api(start_date: date, end_date: date, limit=1000):
# Пример: замените на реальный URL и параметры API к kadroout
api_url = "https://api.kadrout.ru/vacancies" # <= заменить реальным
params = {
"from_date": start_date.isoformat(),
"to_date": end_date.isoformat(),
"limit": limit
}
try:
resp = requests.get(api_url, params=params, timeout=15)
resp.raise_for_status()
data = resp.json()
except Exception as e:
print(f"API запрос не удался: {e}")
return []
vacancies = []
# Пример структуры данных API: список вакансий в data['vacancies'].
items = data.get("vacancies") or data
for item in items:
vac = {
"id": str(item.get("id") or item.get("vacancy_id") or ""),
"title": (item.get("title") or item.get("name") or "").strip(),
"company": (item.get("company") or item.get("employer") or "").strip(),
"date_posted": str(item.get("date_posted") or item.get("date") or ""),
"url": item.get("url") or item.get("link") or ""
}
vacancies.append(vac)
return vacancies
# 2B) Вариант скрапинга (если API нет)
def fetch_vacancies_scrape(start_date: date, end_date: date, max_pages=20):
base_url = "https://kadrout.ru/vacancies" # <= заменить реальным
results = []
page = 1
visited = 0
while page <= max_pages:
# Формируем URL с фильтрами по дате (если сайт поддерживает параметры)
url = f"{base_url}?page={page}&date_from={start_date.isoformat()}&date_to={end_date.isoformat()}"
try:
r = requests.get(url, timeout=15)
if r.status_code != 200:
print(f"Страница {page} вернула статус {r.status_code}. Прерываю скрапинг.")
break
html = r.text
except Exception as e:
print(f"Ошибка запроса к странице {page}: {e}")
break
soup = BeautifulSoup(html, "html.parser")
# ПРИМЕР: замените селекторы на реальные, взяв их через инспектор браузера
# Предположим, что каждая вакансия находится в элементе div.vacancy-card
vacancy_cards = soup.select("div.vacancy-card") or []
if not vacancy_cards:
# Если на этой странице вакансий нет, считаем, что больше страниц нет
break
for card in vacancy_cards:
vac = parse_vacancy_card(card)
if vac:
# Проверяем дату постинга, если удалось распарсить
if is_date_within(vac['date_posted'], start_date, end_date):
results.append(vac)
page += 1
time.sleep(0.5) # уважительная пауза между запросами
# Небольшая защита от бесконечного цикла
visited += 1
if visited > max_pages:
break
return results
def parse_vacancy_card(card_soup):
# Пример парсинга. Замените селекторы на реальные.
title_tag = card_soup.select_one("a.vacancy-title") # ссылка на вакансию
title = title_tag.get_text(strip=True) if title_tag else ""
url = title_tag["href"] if title_tag and title_tag.has_attr("href") else ""
date_span = card_soup.select_one("span.date-posted")
date_posted_raw = date_span.get_text(strip=True) if date_span else ""
# Попытка взять id вакансии
vacancy_id = card_soup.get("data-id") or ""
company_tag = card_soup.select_one("div.company")
company = company_tag.get_text(strip=True) if company_tag else ""
return {
"id": str(vacancy_id),
"title": title,
"company": company,
"date_posted": date_posted_raw,
"url": url
}
def is_date_within(date_str: str, start_date: date, end_date: date) -> bool:
"""
Попытка распарсить дату и проверить, попадает ли она в диапазон.
Если дата не распарсилась, возвращаем True, чтобы не пропустить возможную строку.
"""
if not date_str:
return True
try:
d = date_parser.parse(date_str, fuzzy=True)
d_date = d.date()
return start_date <= d_date <= end_date
except Exception:
return True
def main():
# Выберите режим: 'api' или 'scrape'
mode = "scrape" # поменяйте на "api" если у вас есть API
start_date, end_date = get_last_two_days_range()
if mode == "api":
vacs = fetch_vacancies_api(start_date, end_date)
else:
vacs = fetch_vacancies_scrape(start_date, end_date)
# Выводим результат в консоль в формате JSON
print(json.dumps(vacs, ensure_ascii=False, indent=2))
if __name__ == "__main__":
main()
Как адаптировать под реальный сайт kadrout
- Определите источник:
- Если у kadrout есть API, найдите документацию и используйте формат /vacancies?from_date=YYYY-MM-DD&to_date=YYYY-MM-DD.
- Если API нет, перейдите на сайт к настоящим страницам вакансий и посмотрите HTML-структуру.
- Обновите селекторы в скрапинговом варианте:
- Откройте страницу вакансий в браузере, вызовите инспектор элементов.
- Найдите контейнер вакансии и внутри него:
- заголовок и ссылка на вакансию (css-селектор для a.vacancy-title),
- имя компании (div.company или аналог),
- дату размещения (span.date-posted или аналог),
- возможный id вакансии (data-id или извлекать из ссылки).
- Замените селекторы в parse_vacancy_card на реальные.
- Убедитесь в корректности форматов дат:
- Дата на сайте может быть в виде "2026-03-28", "2 дня назад" и пр. Используйте dateutil.parser для гибкости.
Как запустить
- Установите зависимости:
- pip install requests beautifulsoup4 python-dateutil
- Сохраните файл (например kadroout_last2days.py) и запустите:
- python kadroout_last2days.py
- В консоли вы увидите JSON-объект с вакансиями за последние два дня.
Примечания
- В реальном использовании вам нужно заменить API-URL и/или CSS-селекторы на актуальные данные сайта kadroout. Уточняйте у сайта правила доступности, чтобы не нарушать условия использования.
- Этот пример ориентирован на учебную задачу и демонстрирует два подхода: работу с API и веб-скрапинг. Если у вас есть конкретная ссылка на API kadroout или конкретную страницу вакансий, могу адаптировать код под нее точно под структуру данных.
Понравился ответ?
Задай свой вопрос
Напиши любую задачу или вопрос, а нейросеть её решит



