Python爬取拉勾網招聘資訊並可視化分析
阿新 • • 發佈:2019-01-02
需求:
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