Почему при запросе на сайт отображаются не все теги див с классами?
В парсере проблема в том, что нужных мне тегов 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))