1. 程式人生 > >Python爬取拉勾網招聘資訊並可視化分析

Python爬取拉勾網招聘資訊並可視化分析

需求:
1:獲取指定崗位的招聘資訊
2:對公司地區,公司待遇,學歷情況,工作經驗進行簡單分析並可視化展示

視覺化分析:
    公司地區:柱狀圖,地圖
    公司待遇:雲圖
    公司-學歷情況:餅圖
    公司工作經驗:餅圖

模組:
    request:網路請求
    re:正則匹配資料
    pyecharts:視覺化工具

自定義工具類:map_utils

爬取資料模組:

def get_info(name, page_num):
    '''獲取資料並統計'''
    url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'
# url地址 # 請求頭資訊 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36', 'Host': 'www.lagou.com', 'Referer': 'https://www.lagou.com/jobs/list_%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90?labelWords=&fromSearch=true&suginput='
, 'X-Anit-Forge-Code': '0', 'X-Anit-Forge-Token': 'None', 'X-Requested-With': 'XMLHttpRequest' } # 儲存引數的字典 city_all = {} money_all = {} education_all = {} workyear_all = {} good_all = {} for page in range(1, page_num + 1): if page % 6 == 0
: time.sleep(60) # 請求引數 my_data = { 'first': 'true', 'pn': page, 'kd': name} # 獲取網頁原始碼 html = requests.post(url, headers=headers, data=my_data) html.raise_for_status() html.encoding = 'utf-8' # print(html.json()['content']['positionResult']) result_json = html.json()['content']['positionResult']['result'] for index, result in enumerate(result_json): # 統計地區分佈 city_all[result['city']] = city_all.get(result['city'], 0) + 1 # 統計公司-薪資 money_all[result['companyFullName']] = result['salary'] # 統計學歷需求 education_all[result['education']] = education_all.get(result['education'], 0) + 1 # 統計工作經驗情況 workyear_all[result['workYear']] = workyear_all.get(result['workYear'], 0) + 1 # 待遇情況 good_all[result['positionAdvantage']] = random.randint(1, 20) print('完成{}頁.'.format(page)) # {'杭州': 5, '深圳': 15, '蘇州': 5, '廣州': 5, '上海': 5, '北京': 40} return city_all, money_all, education_all, workyear_all, good_all ---------- **資料分析展示模組:**

”’pyecharts工具類”’

1):地圖模組

def create_geo_charts(data, title):
    '''地圖'''
    page = Page()
    # 樣式
    style = Style(
        title_color="#fff",
        title_pos="center",
        width=1200,
        height=600,
        background_color='#c4ccd3'
    )
    # 建立地圖模型
    chart = Geo(title, "", **style.init_style)
    # 資料 ['上海', '北京', '廣州', '深圳', '蘇州'] [5, 40, 10, 15, 5]
    attr, value = chart.cast(data)
    # 新增資料
    chart.add("", attr, value, maptype='china', is_visualmap=True, type="effectScatter", is_legend_show=False,
              geo_emphasis_color='c4ccd3',
              visual_text_color='#2f4554')

    page.add(chart)

    return page

這裡寫圖片描述

2):柱狀圖模組

def create_Bar_charts(data, title):
    '''柱狀圖'''

    page = Page()

    style = Style(
        width=800, height=600,
        title_pos="center",
    )

    chart = Bar(title, **style.init_style)
    attr, value = chart.cast(data)
    chart.add('', attr, value, mark_line=["average"],
              mark_point=["max", "min"], is_datazoom_show=True, datazoom_range=[50, 80])

    page.add(chart)
    return page

這裡寫圖片描述

3):餅圖模組

def create_Pie_charts(data, title):
    '''餅狀圖'''
    page = Page()

    style = Style(
        width=800, height=800
    )

    chart = Pie(title, **style.init_style)
    attr, value = chart.cast(data)
    chart.add("", attr, value, is_label_show=True)
    page.add(chart)
    return page

這裡寫圖片描述

這裡寫圖片描述

4):詞雲圖模組

def create_clound_charts(data, title):
    '''詞雲圖'''
    page = Page()
    # print(data)

    style = Style(
        width=2000, height=1000,
        title_pos="center",
    )

    chart = WordCloud(title, **style.init_style)
    attr, value = chart.cast(data)
    chart.add("", attr, value, shape='circle')
    page.add(chart)

    return page

這裡寫圖片描述