Комментарии 16
Много картинок, мало текста, при этом масса опечаток. Довольно шизофренично.
мои мелкие заметки обычно выходят в +
так что попробую дать пару советов от продолжающего начинающему
1) больше пояснений кода, я не знаком с питоном и не очень понятно почему это выглядит так
2) не выкладывайте код скринами, это неудобно и не нужно
3) не выкладывате ссылки как юрлы, лучше вот так
4) приложите вконце ссылку на полный репозиторий гита, так куда удобнее будет пользоваться
5) откажитесь от м*терных заголовков, если не деляете что-то очень яркое, обычно ожидания рушатся, если подкат не соответсвует столь дерзкому кату
так что попробую дать пару советов от продолжающего начинающему
1) больше пояснений кода, я не знаком с питоном и не очень понятно почему это выглядит так
2) не выкладывайте код скринами, это неудобно и не нужно
Cosole.WriteLine("Так лучше")
3) не выкладывате ссылки как юрлы, лучше вот так
4) приложите вконце ссылку на полный репозиторий гита, так куда удобнее будет пользоваться
5) откажитесь от м*терных заголовков, если не деляете что-то очень яркое, обычно ожидания рушатся, если подкат не соответсвует столь дерзкому кату
Спасибо за фидбек, постараюсь исправить ошибки.
надеюсь вы не перестанете писать после этого выстрела в свою ногу
и вот ознакомьтесь
habr.com/ru/company/habr/blog/456358
и вот ознакомьтесь
habr.com/ru/company/habr/blog/456358
Дата-саентолога? С PyTorch-одитингом? :)
Репрезентативность выборки не доказана. Почему не берете в учет вакансии из банковского сектора, например, где даже для джунов зарплата с учетом премий доходит до 200к? Может, потому что их нет на hh? Тогда с чего "парсинг Хедхантера это самый надежный и легкий способ" узнать ситуацию на рынке труда?
Потому что это стация про этом как скачать и обработать данные с HH с помощью python, доказательство репрезентативности выборки оставляю другим. Наверное вы уже заметили что тоже не определил вакансии по городом ли областям etc. Это стация сможет становить базу для полноценного анализа. Сможете сделать статью по вашим запросом, с радостью ознакомлюсь, удачи!
Кстати, если у вас есть лучшие источники чем HH, то напишите в личку или оставите здесь, многим понадобиться.
Парсер hh
# !/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
import xlsxwriter # pip install XlsxWriter
import requests # pip install requests
from bs4 import BeautifulSoup as bs # pip install beautifulsoup4
headers = {'accept': '*/*', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}
vacancy = input('Укажите название вакансии: ')
base_url = f'https://hh.ru/search/vacancy?area=1&search_period=30&text={vacancy}&page=' # area=1 - Москва, search_period=3 - За 30 последних дня
pages = int(input('Укажите кол-во страниц для парсинга: '))
#Юрист+юрисконсульт
jobs =[]
def hh_parse(base_url, headers):
zero = 0
while pages > zero:
zero = str(zero)
session = requests.Session()
request = session.get(base_url + zero, headers = headers)
if request.status_code == 200:
soup = bs(request.content, 'html.parser')
divs = soup.find_all('div', attrs = {'data-qa': 'vacancy-serp__vacancy'})
for div in divs:
title = div.find('a', attrs = {'data-qa': 'vacancy-serp__vacancy-title'}).text
compensation = div.find('div', attrs={'data-qa': 'vacancy-serp__vacancy-compensation'})
if compensation == None: # Если зарплата не указана
compensation = 'None'
else:
compensation = div.find('div', attrs={'data-qa': 'vacancy-serp__vacancy-compensation'}).text
href = div.find('a', attrs = {'data-qa': 'vacancy-serp__vacancy-title'})['href']
try:
company = div.find('a', attrs = {'data-qa': 'vacancy-serp__vacancy-employer'}).text
except:
company = 'None'
text1 = div.find('div', attrs = {'data-qa': 'vacancy-serp__vacancy_snippet_responsibility'}).text
text2 = div.find('div', attrs = {'data-qa': 'vacancy-serp__vacancy_snippet_requirement'}).text
content = text1 + ' ' + text2
all_txt = [title, compensation, company, content, href]
jobs.append(all_txt)
zero = int(zero)
zero += 1
else:
print('error')
# Запись в Excel файл
workbook = xlsxwriter.Workbook('Vacancy.xlsx')
worksheet = workbook.add_worksheet()
# Добавим стили форматирования
bold = workbook.add_format({'bold': 1})
bold.set_align('center')
center_H_V = workbook.add_format()
center_H_V.set_align('center')
center_H_V.set_align('vcenter')
center_V = workbook.add_format()
center_V.set_align('vcenter')
cell_wrap = workbook.add_format()
cell_wrap.set_text_wrap()
# Настройка ширины колонок
worksheet.set_column(0, 0, 35) # A https://xlsxwriter.readthedocs.io/worksheet.html#set_column
worksheet.set_column(1, 1, 20) # B
worksheet.set_column(2, 2, 40) # C
worksheet.set_column(3, 3, 135) # D
worksheet.set_column(4, 4, 45) # E
worksheet.write('A1', 'Наименование', bold)
worksheet.write('B1', 'Зарплата', bold)
worksheet.write('C1', 'Компания', bold)
worksheet.write('D1', 'Описание', bold)
worksheet.write('E1', 'Ссылка', bold)
row = 1
col = 0
for i in jobs:
worksheet.write_string (row, col, i[0], center_V)
worksheet.write_string (row, col + 1, i[1], center_H_V)
worksheet.write_string (row, col + 2, i[2], center_H_V)
worksheet.write_string (row, col + 3, i[3], cell_wrap)
# worksheet.write_url (row, col + 4, i[4], center_H_V)
worksheet.write_url (row, col + 4, i[4])
row += 1
print('OK')
workbook.close()
hh_parse(base_url, headers)
Код не авторский, кроме некоторых костылей.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Считаем среднюю ЗП «дата-саентолога». Парсим hh.ru с помощью pandas/python