При парсинге hh.ru результатом является пустой список
При парсинге сайта hh.ru хочу вытащить название вакансии, ссылку на вакансию, вилку зп, название компании, город. При этом все вакансии отфильтровать по наличию в ее описании слов 'Django' или 'Flask'. Вытаскиваю каждый элемент в цикле, добавляю их в список в виде словаря. В итоге должен получиться список из словарей. Но у меня в итоге пустой список. Подскажите, пожалуйста, что не так? Код прилагаю.
import requests
from pprint import pprint
from bs4 import BeautifulSoup
from fake_headers import Headers
import json
def get_headers():
return Headers(browser='chrome', os='win').generate()
HOST = 'https://hh.ru/search/vacancy?text=python&area=1&area=2'
html = requests.get(HOST, headers=get_headers()).text
pprint(html)
soup = BeautifulSoup(html, features='lxml')
vacancy = soup.find_all('div', class_='vacancy_serp-item__layout')
pprint(vacancy)
description_list = []
for item in vacancy:
description_vacancy = item.find('div', data_qa='vacancy-serp__vacancy_snippet_requirement')
description = description_vacancy.find('span').text
if 'Django' in description and 'Flask' in description:
description_list.append(item)
vacancy_list = []
for word in description_list:
title = word.find('a', class_='serp-item__title').text
link_tag = word.find('a', class_='serp-item__title')
link = link_tag['href']
try:
salary_tag = word.find('span', class_='bloko-header-section-3')
salary = salary_tag.text
except Exception:
salary = 'Не указана'
company_tag = word.find('a', class_='bloko-link bloko-link_kind-tertiary')
company = company_tag.text
city_tag = word.find('div', class_='bloko-text')
city = city_tag.text
vacancy_list.append({
'Название': title,
'Зарплата': salary,
'Компания': company,
'Город': city,
'Ссылка': link
})
pprint(vacancy_list)
with open('vacancy.json', 'w') as f:
json.dump(vacancy_list, f)
Источник: Stack Overflow на русском