-
Notifications
You must be signed in to change notification settings - Fork 0
/
HomeWork_Lesson_2(sj).py
66 lines (55 loc) · 3.56 KB
/
HomeWork_Lesson_2(sj).py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import pandas as pd
from bs4 import BeautifulSoup as bs
import requests
vacancy_input = input('Введите название вакансии: ') #Тестировал на Python
vacancies = []
pages_input = input('Введите количество анализируемых страниц: ') #Тестировал на 2 страницах
for page in range(int(pages_input)):
main_link = 'https://superjob.ru'
params = {'keywords': vacancy_input,
'page': page}
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)'
'Chrome/86.0.4240.75 Safari/537.36',
'Authorization': '*/*'}
response = requests.get(main_link + '/vacancy/search/', headers=header, params=params)
soup = bs(response.text, 'html.parser')
vacancy_list = soup.findAll('div', {'class': 'Fo44F QiY08 LvoDO'})
for vacancy in vacancy_list:
vacancy_data = {}
vacancy_link = main_link + vacancy.find('div', {'class': '_3zucV undefined _3SGgo'}).find('a')['href'] #Время от времени здесь возникает проблема: эти замудренные название классов у дивов иногда меняются.
vacancy_name = vacancy.find('div', {'class': '_3mfro CuJz5 PlM3e _2JVkc _3LJqf'}).getText()
vacancy_salary = vacancy.find('span', {'class': '_3mfro _2Wp8I _1qw9T f-test-text-company-item-salary PlM3e _2JVkc _2VHxz'}).getText()
if vacancy.find('span', {'class': '_3mfro _3Fsn4 f-test-text-vacancy-item-company-name _9fXTd _2JVkc _2VHxz _15msI'}):
vacancy_company = vacancy.find('span', {'class': '_3mfro _3Fsn4 f-test-text-vacancy-item-company-name _9fXTd _2JVkc _2VHxz _15msI'}).find('a').getText()
else:
vacancy_company = 'NaN'
vacancy_data['name'] = vacancy_name
vacancy_data['link'] = vacancy_link
vacancy_data['company'] = vacancy_company
vacancy_salary_list = vacancy_salary.split( )
if vacancy_salary_list[0] == 'от':
vacancy_data['salary_min'] = int(vacancy_salary_list[1] + vacancy_salary_list[2])
vacancy_data['salary_max'] = 'NaN'
vacancy_data['currency'] = vacancy_salary_list[3]
elif vacancy_salary_list[0] == 'до':
vacancy_data['salary_min'] = 'NaN'
vacancy_data['salary_max'] = int(vacancy_salary_list[1] + vacancy_salary_list[2])
vacancy_data['currency'] = vacancy_salary_list[3]
elif vacancy_salary_list[0] == 'По':
vacancy_data['salary_min'] = 'NaN'
vacancy_data['salary_max'] = 'NaN'
vacancy_data['currency'] = 'NaN'
elif vacancy_salary.find('-') & len(vacancy_salary_list) > 4:
vacancy_data['salary_min'] = int(vacancy_salary_list[0] + vacancy_salary_list[1])
vacancy_data['salary_max'] = int(vacancy_salary_list[3] + vacancy_salary_list[4])
vacancy_data['currency'] = vacancy_salary_list[4]
else:
vacancy_data['salary_min'] = int(vacancy_salary_list[0] + vacancy_salary_list[1])
vacancy_data['salary_max'] = int(vacancy_salary_list[0] + vacancy_salary_list[1])
vacancy_data['currency'] = vacancy_salary_list[2]
vacancy_data['source'] = main_link[15:]
vacancies.append(vacancy_data)
if not soup.find('a', {'class': 'icMQ_ _1_Cht _3ze9n f-test-button-dalshe f-test-link-Dalshe'}):
break
df_vacancies = pd.DataFrame(vacancies)
df_vacancies.to_csv(f'df_vacancies_sj_{vacancy_input}.csv', encoding='utf-8')