Как написать код для парсинга сайта hh.ru, чтобы извлечь все вакансии с одной страницы?

Как можно улучшить код для парсинга hh.ru, чтобы правильно извлекать информацию о вакансиях, такую как название, опыт, название организации и ссылку? Как можно изменить код, чтобы он корректно извлекал все доступные вакансии без ограничения на количество?
  • 12 мая 2024 г. 15:10
Ответы на вопрос 1
Для парсинга сайта hh.ru и извлечения всех вакансий с одной страницы можно воспользоваться библиотекой requests для отправки запросов на сайт и библиотекой BeautifulSoup для разбора полученного HTML-кода.

Пример кода для парсинга одной страницы сайта hh.ru:

```python
import requests
from bs4 import BeautifulSoup

url = 'https://hh.ru/search/vacancy?area=1&st=searchVacancy&text=python'

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

vacancies = soup.find_all('div', {'class': 'vacancy-serp-item'})

for vacancy in vacancies:
    title = vacancy.find('a', {'data-qa': 'vacancy-serp__vacancy-title'}).text
    experience = vacancy.find('span', {'data-qa': 'vacancy-serp__vacancy-experience'}).text
    company = vacancy.find('a', {'data-qa': 'vacancy-serp__vacancy-employer'}).text
    link = vacancy.find('a', {'data-qa': 'vacancy-serp__vacancy-title'})['href']

    print(f'Title: {title}\nExperience: {experience}\nCompany: {company}\nLink: {link}\n')
```

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

Для извлечения всех доступных вакансий без ограничения на количество, можно использовать пагинацию и отправлять запросы на следующие страницы, пока они доступны. Можно найти элемент на странице, отвечающий за пагинацию, и извлечь из него количество доступных страниц. Затем можно автоматизировать процесс перехода на следующую страницу и повторять процесс сбора данных.

```python
page = 0
while True:
    page_url = f'https://hh.ru/search/vacancy?area=1&st=searchVacancy&text=python&page={page}'
    response = requests.get(page_url)
    soup = BeautifulSoup(response.text, 'html.parser')
    
    vacancies = soup.find_all('div', {'class': 'vacancy-serp-item'})
    
    for vacancy in vacancies:
        # Извлечение данных о вакансиях
    
    if not soup.find('a', {'data-qa': 'pager-next'}):  # Проверка наличия следующей страницы
        break
    
    page += 1
```

Таким образом, добавив возможность работы с пагинацией, можно извлечь все доступные вакансии с сайта hh.ru.
Похожие вопросы