Напиши код вакансии самой последней на сайте kadrout
Ответ нейросети
11 марта 2026 12:00
Задача понятна: написать код, который возвращает информацию о самой последней вакансии на сайте kadrout (то есть последняя по дате размещения). Ниже — подробное решение с пояснениями и рабочим примером кода на Python. Учти, что структура страницы может меняться, поэтому код рассчитан на адаптацию под реально изучаемый HTML.
Важно: перед скрапингом проверь robots.txt у сайта и правила использования данных. Также желательно добавлять задержки между запросами и уважать ограничение частоты запросов.
Часть 1. Общее объяснение подхода
- Мы загружаем страницу с вакансиями (страница с последними объявлениями).
- Парсим HTML и ищем первый элемент-карточку вакансии, которая обычно имеет классы, содержащие слова vacancy, job, card и т.д.
- Из найденного элемента извлекаем:
- title (название вакансии)
- link (ссылка на полное объявление)
- company (компания)
- location (местоположение)
- date_posted (дата размещения, если есть)
- Если структура страницы отличается, код подцепит данные с других селекторов и подскажет, какие селекторы подставить.
Часть 2. Пример кода (Python, requests + BeautifulSoup)
- Требуются библиотеки: requests, beautifulsoup4
- Установка: pip install requests beautifulsoup4
Сохранение: ниже приведён единый скрипт. Он ищет наиболее вероятные CSS-селекторы карточки вакансии и полей, и возвращает словарь с данными. Если какой-то элемент найти не удалось — он будет None.
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
def fetch_latest_vacancy(base_url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'
}
resp = requests.get(base_url, headers=headers, timeout=20)
resp.raise_for_status()
soup = BeautifulSoup(resp.text, 'html.parser')
# Попытки найти карточку вакансии по нескольким распространённым селекторам
selectors = [
'.vacancy-card', # common
'.job-card', # common
'.job-item', # common
'.vacancy', # common
'article.job', # common структура
'div[id^="vacancy"]', # динамические id
'div[class*="vacancy-card"]',
'li[class*="vacancy"]',
'div[class*="job-card"]',
'section[class*="vacancy"]',
]
latest_el = None
for sel in selectors:
el = soup.select_one(sel)
if el:
latest_el = el
break
# Если не нашли карточку — fallback к первой ссылке на странице
if latest_el is None:
a = soup.find('a')
if a:
title = a.get_text(strip=True)
link = urljoin(base_url, a.get('href'))
return {
'title': title,
'link': link,
'company': None,
'location': None,
'date_posted': None
}
return None
# Из самой карточки извлекаем данные
def get_text(parent, selectors):
for s in selectors:
el = parent.select_one(s)
if el and el.get_text(strip=True):
return el.get_text(strip=True)
return None
# Заголовок и ссылка (возьмём первый <a> внутри карточки, если он есть)
title_tag = latest_el.select_one('a') or latest_el.find(['h1','h2','h3','span','div'])
title = title_tag.get_text(strip=True) if title_tag else None
link = None
if title_tag and title_tag.name == 'a' and title_tag.get('href'):
link = urljoin(base_url, title_tag['href'])
else:
# попытка найти любую ссылку внутри карточки
a = latest_el.find('a')
if a and a.get('href'):
link = urljoin(base_url, a['href'])
company = get_text(latest_el, [
'.company', '.employer', '.organization', '.brand',
'span.company', 'div.company'
])
location = get_text(latest_el, [
'.location', '.city', '.region', '.place',
'span.location', 'div.location'
])
date_posted = get_text(latest_el, [
'.date', '.posted', '.time', 'time'
])
return {
'title': title,
'link': link,
'company': company,
'location': location,
'date_posted': date_posted
}
if __name__ == '__main__':
# Замените на фактическую страницу вакансий kadroout
url = 'https://kadrout.ru/vacancies' # пример; укажите реальный адрес страницы вакансий
result = fetch_latest_vacancy(url)
print(result)
Как адаптировать под конкретный сайт kadroout
- Откройте страницу вакансий в браузере.
- Правой кнопкой по карточке вакансии -> "Inspect" (Инспектор).
- Посмотрите структуру HTML: какие классы у карточки вакансии (например, идущие в селекторах .vacancy-card, .job-card и т.д.), какие элементы содержат title, company, location, date.
- Подставьте реальные селекторы в массив selectors. Можно временно распечатать весь HTML и найти нужные элементы, чтобы подобрать точные селекторы.
Часть 3. Альтернатива: динамическая загрузка контента (JS) Если страница подгружает данные ваканси через JavaScript и HTML не содержит карточек сразу после загрузки, используйте Selenium (или Playwright) чтобы рендерить страницу и потом парсить готовый HTML.
Пример с Selenium (headless Chrome):
- Требуется: selenium, chromedriver (или geckodriver). Установка: pip install selenium
- Убедитесь, что версия драйвера совместима с вашей версией Chrome.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import time
from urllib.parse import urljoin
def fetch_latest_vacancy_js(url):
options = Options()
options.add_argument("--headless")
options.add_argument("--disable-gpu")
driver = webdriver.Chrome(options=options)
try:
driver.get(url)
time.sleep(3) # подождать загрузку JS
html = driver.page_source
finally:
driver.quit()
soup = BeautifulSoup(html, 'html.parser')
# используйте те же селекторы, что и в статическом примере
# ...
# здесь можно повторить логику из fetch_latest_vacancy на полученном soup
return None # заменить на реальную обработку
if __name__ == '__main__':
url = 'https://kadrout.ru/vacancies'
print(fetch_latest_vacancy_js(url))
Часть 4. Что нужно изменить под твой случай
- Замени URL в коде на фактическую страницу вакансий на kadrou t.
- Обнови список selectors под конкретную версию HTML данного сайта.
- При отсутствии даты размещения — оставляй date_posted как None.
- Добавь обработку относительных ссылок и корректную нормализацию URL.
Часть 5. Примечания
- Уважай robots.txt и правила сайта касательно скрапинга.
- Не перегружай сайт частыми запросами; можешь добавить паузы между запросами.
- Если страница предоставляет RSS/Atom фид вакансий, проще парсить его — он однозначно отдаёт последние записи.
Если хочешь, скажи точный URL страницы kadroout, и я адаптирую селекторы под конкретную версию страницы и пришлю готовый рабочий скрипт под твой случай.
Понравился ответ?
Задай свой вопрос
Напиши любую задачу или вопрос, а нейросеть её решит



