Почему при запросе на сайт отображаются не все теги див с классами?

В парсере проблема в том, что нужных мне тегов 55: введите сюда описание изображения

А в итоге их получается только 20 при парсинге. Даже html файл сайта скачивал в поиске этих тегов только 20 Почему?

Код:

from bs4 import BeautifulSoup
import requests
import json

def parse():
    address = "https://hh.ru/search/vacancy?area=1&fromSearchLine=true&text=junior+python&page=0&hhtmFrom=vacancy_search_list"

    headers = {
        "Accept": "*/*",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.41 Safari/537.36"
    }

    response = requests.get(url=address, headers=headers).text.encode().decode("utf-8")

    soup = BeautifulSoup(response, "lxml")
    vacancies = soup.find_all(class_="vacancy-serp-item-body__main-info")

    print(len(vacancies))

def main():
    parse()

if __name__ == '__main__':
    main()

Ответы (1 шт):

Автор решения: Universall

Проблема в том, что классы (или может даже сами div'ы) подгружаются с помощью JS во время загрузки страницы. Для того, чтобы получить полностью прогруженную страницу можно использовать selenium:

import bs4
import time
from selenium import webdriver  # pip install selenium
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager  # pip install webdriver-manager


with webdriver.Chrome(service=Service(ChromeDriverManager().install())) as driver:  # Открываем хром
    driver.get("https://kirov-kaluga.hh.ru/search/vacancy?area=1&fromSearchLine=true&text=junior+python&page=0&hhtmFrom=vacancy_search_list")  # Открываем страницу
    time.sleep(5)  # Время на прогрузку страницы
    soup = BeautifulSoup(driver.page_source, 'html.parser')  # Получаем готовый html и парсим его

vacancies = soup.findAll("div", class_="vacancy-serp-item")
titles = [vacancy.find("a", class_="bloko-link").text for vacancy in vacancies]
print(*titles, sep="\n")
print(len(vacancies))


→ Ссылка