CoderCastrov logo
CoderCastrov
Парсер

Парсинг веб-сайтов и визуализация данных для поиска работы

Парсинг веб-сайтов и визуализация данных для поиска работы
просмотров
5 мин чтение
#Парсер

Большинство студентов магистратуры уже определились с выбором своей будущей карьеры или имеют представление о возможных вариантах работы до поступления в университет. Однако, по мере развития мировых тенденций и углубления в специализированные области, они могут постепенно осознать необходимость внесения изменений, что приводит к большей неопределенности. Более того, перед ними стоит проблема переезда для идеального карьерного развития. Даже внутри схожих рабочих областей различные типы работы отличаются во многих аспектах, таких как предпочтительные наборы навыков, зарплата, распределение по местоположению и целевые компании.

Если соискатели могут иметь возможность провести всестороннее сравнение этих двух направлений по содержанию работы, навыкам, зарплате, местоположению и другим значимым аспектам, они смогут подготовиться как можно раньше, чтобы отточить свои навыки и накопить соответствующий опыт стажировки. Кроме того, они получат более четкое представление о выборе потенциального местоположения и предпочтительной отрасли, наиболее подходящих для них.

Таким образом, то, что мы можем сделать, это использовать методы парсинга веб-сайтов для сбора необходимых данных и провести дальнейший анализ и визуализацию данных на их основе. Вместе с тепловыми картами, облаками текста, гистограммами и круговыми диаграммами пользователи также получат более подробный и показательный отчет для ориентации и вдохновения своих идей по карьерному планированию.

Весь код можно найти на https://github.com/yuxin-yao/Scraper-for-Job-Hunting/tree/master.



Парсинг данных с Glassdoor

Используя Beautifulsoup для парсинга статического текста и Selenium для имитации действия клика для перехода на следующую страницу.

def glassdoorscraper(search_job):
    import time
    # hdr = {'User-Agent': 'Mozilla/5.0'}
    jobName = search_job.replace(' ', '+')  # изменяем ключевое слово для поиска в формате URL Glassdoor
    page = 30
    start = time.time()
    result_glassdoor, jobsCount = find_info(page, jobName)
    end = time.time()
    print("Время выполнения: %d" % (end-start))
    return result_glassdoor, jobsCount

Через этот способ мы можем получить данные о "вакансиях" в виде фрейма данных.

Очистка данных

Очистка сырых данных с сайта Glassdoor. Основное внимание уделяется двум столбцам: местоположение и зарплата. Для местоположения извлекаются названия штатов и удаляются названия штатов с более чем двумя буквами. Для зарплаты извлекаются минимальная и максимальная зарплаты без формата, а затем вычисляется средняя зарплата. Также заменяются значения None на np.nan в столбцах с зарплатой и штатом. И, наконец, удаляются строки с отсутствующим названием должности во фрейме данных.

Визуализация данных

Мы можем использовать пакет Plotly для построения тепловых карт, которые представляют собой тепловые карты, использующие географические границы для отображения пространственных вариаций величины. Первая тепловая карта отображает распределение числа вакансий. Мы агрегируем данные по штатам, подсчитываем количество вакансий в каждом штате и затем строим тепловую карту. Вторая тепловая карта отображает среднюю зарплату.

import pandas as pd
from collections import Counter
z = jobs['State']
a = Counter(z)
df = pd.DataFrame.from_dict(a, orient='index').reset_index()
df = df[df['index'].str.len() <= 2]
import plotly.graph_objects as go# Загрузка фрейма данных и его обработка.figstate = go.Figure(data=go.Choropleth(
    locations=df['index'], # Пространственные координаты
    z = df[0].astype(float), # Данные для закрашивания цветом
    locationmode = 'USA-states', 
    # набор мест соответствует записям в `locations`
    colorscale = 'Blues',
    colorbar_title = "# вакансий",
    ))
    
figstate.update_layout(
    title_text = '# вакансий по должности '+search_job+' в США по штатам',
    geo_scope='usa', # ограничение области карты США
    )
figstate.show()
  1. Облако слов

В первую очередь мы загружаем английские стоп-слова из пакета NLTK и добавляем к ним несколько новых слов. Затем мы используем пакет sklearn для создания списка частоты слов. Наконец, с помощью библиотеки wordcloud создается объект wordCloud, который отображается с помощью Matplotlib.

  1. Обычные графики

Эта часть используется для визуализации данных о зарплате и должностях в формате гистограммы и столбчатой диаграммы. Сначала используются Pandas и Numpy для анализа данных, затем результаты визуализируются с помощью Seaborn и Matplotlib.

Первая гистограмма отображает распределение зарплаты по всей стране, где также указаны среднее значение, медиана и квартили для сравнения. Вторая столбчатая диаграмма показывает распределение зарплаты для пяти лучших должностей, с указанием средней и медианной зарплаты для всех должностей в качестве справочной информации. Третья горизонтальная столбчатая диаграмма представляет десять лучших должностей вместе с количеством вакансий для каждой из них.

HTML Output

В этой части мы будем использовать BytesIO для сохранения изображений в matplotlib в виде двоичного файла и использовать base64 для получения изображений в формате HTML. Затем мы вставим URL изображений и текстовые описания в HTML-отчет. В дополнение к показанным выше изображениям, мы также покажем количество вакансий на Glassdoor, чтобы показать, насколько конкурентоспособна позиция.

import chart_studio
import chart_studio.plotly as py
chart_studio.tools.set_credentials_file(username='-----', api_key='----')
    
plotstate_url = py.plot(figstate, filename='plotstate_url') 
plotsal_url = py.plot(figsal, filename='plotsal_url') 
html_string = '''
    <html>
        <head>
            <link rel="stylesheet" href="[https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css](https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css)">
            <style>body{ margin:0 100; background:whitesmoke; }</style>
        </head>
        <body>
            <h1>'''+search_job+''' отчет о поиске</h1>
            <h2>Всего найдено '''+jobsCount+''' вакансий по запросу '''+search_job+''' в США</h2>
            <!-- *** Раздел 1: Карта распределения количества вакансий по штатам США *** --->
            <h2>Раздел 1: Карта распределения количества вакансий по штатам США</h2>
            <iframe width="1000" height="550" frameborder="0" seamless="seamless" scrolling="no" \
    src="''' + plotstate_url + '''.embed?width=800&height=550"></iframe>
            <p>Источник: Glassdoor.</p>
            
            <h2>Раздел 2: Карта распределения зарплат по штатам США</h2>
            <iframe width="1000" height="550" frameborder="0" seamless="seamless" scrolling="no" \
    src="''' + plotsal_url + '''.embed?width=800&height=550"></iframe>
            <p>Источник: Glassdoor.</p>
            <!-- *** Раздел 2: Гистограмма распределения зарплат *** --->
            <h2>Раздел 3: Гистограмма распределения зарплат</h2>
            '''+salbar_im+'''
            <p>Источник: Glassdoor.</p>
            <h2>Раздел 4: Гистограмма распределения зарплат для Топ-5 позиций в США</h2>
            '''+salpobar_im+'''
            <p>Источник: Glassdoor.</p>
            <h2>Раздел 5: Гистограмма распределения должностей в США</h2>
            <img src="pobar_im.png", width = 1000>
            <p>Источник: Glassdoor.</p>
            <!-- *** Раздел 3: Облако слов *** --->
            <h2>Раздел 6: Облако слов для описания вакансий в США</h2>
            <img src="my_test1.png", width = 1000>
            <p>Источник: Indeed.</p>
           
        </body>
    </html>'''

Таким образом, вы можете создать свой собственный отчет с функциями, которые вас интересуют! Удачи в поиске работы!