не могу полностью спарсить сайт
хотел создать программу, что бы та проходилась по станицам hh ссылка на сайт с запросом и вытаскивала требования с каждой вакансии, после чего отсортировать и вывести в порядке убывания. от части мне удалось, но вот проблема. загружает он со страницы только 20 вакансий, хотя с браузера грузит 50. а страниц проходит 12, хотя в браузере 22. мои познания в разработке не велики, по этому не знаю на сколько глубоко может лежать проблема. заранее спасибо
import requests as req
from bs4 import BeautifulSoup as BS
# онализ страницы с вакансиями и получение ссылок ...
def get_links(): #soup (на лист вакансий) -> list links
element = soup.find_all(attrs={"class":"magritte-link___b4rEM_5-0-7 magritte-link_mode_primary___l6una_5-0-7 magritte-link_style_neutral___iqoW0_5-0-7 magritte-link_enable-visited___Biyib_5-0-7"})
links = []
for el in element:
link = el.get("href")
if link:
links.append(link)
return links
# хватаем требования с вакансий FULL
def questy_blank(url_ln): # url (на вакансию) -> main_list.append
response = req.get(url_ln, headers=headers)
soup = BS(response.text, "html.parser")
global main_list
if check_code(response.status_code):
elements = soup.find_all('li', attrs={'data-qa': 'skills-element'})
for el in elements:
main_list.append(el.text)
main_list.append("-:-") # для отладки
# проверем ответ от сервера FULL
def check_code(res):
if res == 200:
return 1
else:
print (f"err code: {response.status_code}")
return 0
# результат FULL
def result(): # готовый список (.lower) list -> sort -> output obj : n \n obj2 : n-1
detect_cope = []
unsorted_dict = {}
for skill in main_list:
if skill in detect_cope:
continue
detect_cope.append(skill)
unsorted_dict[skill] = main_list.count(skill)
sorted_dict = dict(sorted(unsorted_dict.items(), key=lambda item: item[1], reverse=True))
for index, (skill, cnt) in enumerate(sorted_dict.items(), start=1):
print(f" {index}: {skill} | {cnt}")
url = "https://hh.ru/search/vacancy?text=Backend+python&salary=&ored_clusters=true&page=0&searchSessionId=b26f36ca-8ed4-4d23-b671-20745be2c63a"
headers = { "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:136.0) Gecko/20100101 Firefox/136.0" }
main_list = []
main_page = 0
while check_code((response:=req.get(url, headers=headers)).status_code):
soup = BS(response.text, "html.parser")
print("main_page:", main_page)
links = get_links()
for ln in links: # перебор вакансий на странице
questy_blank(ln)
main_page += 1
index_page = url.index("&searchSessionId")
url = url[:index_page-1] + str(main_page) + url[index_page:] # next page
result()
Ответы (1 шт):
Автор решения: DEN
→ Ссылка
Рекомендую делать сбор требований через их API: https://api.hh.ru/openapi/redoc.