更多课程 选择中心


Python培训

400-111-8989

教你用python采集拉勾网数据并将其可视化

  • 发布:挖掘机小王子
  • 来源:知乎
  • 时间:2018-05-29 16:46

python编程,我们可以采集很多我们想采集的信息,并将其可视化,在之前的文章中我们也讲过一些, 如果你还是不太了解,那就再看看今天python培训带来的案例分享:用python采集拉勾网数据并将其可视化。

全文简介

本文是先采集拉勾网上面的数据,采集的是Python岗位的数据,然后用Python进行可视化。主要涉及的是爬虫&数据可视化的知识。

爬虫部分

先用Python来抓取拉勾网上面的数据,采用的是简单好用的requests模块。主要注意的地方是,拉勾网属于动态网页,所以会用到浏览器的F12开发者工具进行抓包。抓包以后会发现,其实网页是一个POST的形式,所以要提交数据,提交的数据如下图:

需要提交的数据

在上图也可以轻松发现:kd是查询关键词,pn是页数,可以实现翻页。

代码实现

import requests # 网络请求

import re

import time

import random

# post的网址

url = '#/jobs/positionAjax.json?needAddtionalResult=false&isSchoolJob=0'

# 反爬措施

header = {'Host': '#',

'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36',

'Accept': 'application/json, text/javascript, */*; q=0.01',

'Accept-Language': 'zh-CN,en-US;q=0.7,en;q=0.3',

'Accept-Encoding': 'gzip, deflate, br',

'Referer': '#/jobs/list_Python?labelWords=&fromSearch=true&suginput=',

'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',

'X-Requested-With': 'XMLHttpRequest',

'X-Anit-Forge-Token': 'None',

'X-Anit-Forge-Code': '0',

'Content-Length': '26',

'Cookie': 'user_trace_token=20171103191801-9206e24f-9ca2-40ab-95a3-23947c0b972a; _ga=GA1.2.545192972.1509707889; LGUID=20171103191805-a9838dac-c088-11e7-9704-5254005c3644; JSESSIONID=ABAAABAACDBABJB2EE720304E451B2CEFA1723CE83F19CC; _gat=1; LGSID=20171228225143-9edb51dd-ebde-11e7-b670-525400f775ce; PRE_UTM=; PRE_HOST=www.baidu.com; PRE_SITE=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DKkJPgBHAnny1nUKaLpx2oDfUXv9ItIF3kBAWM2-fDNu%26ck%3D3065.1.126.376.140.374.139.129%26shh%3Dwww.baidu.com%26sht%3Dmonline_3_dg%26wd%3D%26eqid%3Db0ec59d100013c7f000000055a4504f6; PRE_LAND=https%3A%2F%2F#%2F; LGRID=20171228225224-b6cc7abd-ebde-11e7-9f67-5254005c3644; index_location_city=%E5%85%A8%E5%9B%BD; TG-TRACK-CODE=index_search; SEARCH_ID=3ec21cea985a4a5fa2ab279d868560c8',

'Connection': 'keep-alive',

'Pragma': 'no-cache',

'Cache-Control': 'no-cache'}for n in range(30):

# 要提交的数据

form = {'first':'false',

'kd':'Python',

'pn':str(n)}

time.sleep(random.randint(2,5))

# 提交数据

html = requests.post(url,data=form,

headers = header)

# 提取数据

data = re.findall('{"companyId":.*?,"positionName":"(.*?)","workYear":"(.*?)","education":"(.*?)","jobNature":"(.*?)","financeStage":"(.*?)","companyLogo":".*?","industryField":".*?","city":"(.*?)","salary":"(.*?)","positionId":.*?,"positionAdvantage":"(.*?)","companyShortName":"(.*?)","district"',html.text)

# 转换成数据框

data = pd.DataFrame(data)

# 保存在本地

data.to_csv(r'D:Windows 7 DocumentsDesktopMyLaGouDataMatlab.csv',header = False, index = False, mode = 'a+')

注意:抓取数据的时候不要爬取太快,除非你有其他的反爬措施,比如更换IP等,另外不需登录,我在代码加入了time模块,用于限制爬取速度。

数据可视化

下载下来的数据长成这个样子:

下载下来的数据

注意标题(也就是列明)是我自己添加的。

导入模块并配置绘图风格

import pandas as pd # 数据框操作

import numpy as np import matplotlib.pyplot as plt # 绘图

import jieba # 分词from wordcloud import WordCloud # 词云可视化

import matplotlib as mpl # 配置字体

from pyecharts import Geo # 地理图

mpl.rcParams["font.sans-serif"] = ["Microsoft YaHei"]# 配置绘图风格

plt.rcParams["axes.labelsize"] = 16.

plt.rcParams["xtick.labelsize"] = 14.

plt.rcParams["ytick.labelsize"] = 14.

plt.rcParams["legend.fontsize"] = 12.

plt.rcParams["figure.figsize"] = [15., 15.]

注意:导入模块的时候其他都容易解决,除了wordcloud这个模块,这个模块我建议大家手动安装,如果pip安装的话,会提示你缺少C++14.0之类的错误,导致安装不上。手动下载whl文件就可以顺利安装了。

数据预览

# 导入数据

data = pd.read_csv('D:\Windows 7 Documents\Desktop\My\LaGouDataPython.csv',encoding='gbk') # 导入数据data.head()
数据预览

read_csv路径不要带有中文

data.tail()

数据预览

学历要求

data['学历要求'].value_counts().plot(kind='barh',rot=0)plt.show()
学历要求

工作经验

data['工作经验'].value_counts().plot(kind='bar',rot=0,color='b')plt.show()
工作经验

Python热门岗位

final = ''

stopwords = ['PYTHON','python','Python','工程师','(',')','/'] # 停止词

for n in range(data.shape[0]):

seg_list = list(jieba.cut(data['岗位职称'][n]))

for seg in seg_list:

if seg not in stopwords:

final = final + seg + ' '

# final 得到的词汇
Python热门岗位

工作地点

data['工作地点'].value_counts().plot(kind='pie',autopct='%1.2f%%',explode = np.linspace(0,1.5,25))plt.show()
工作地点

工作地理图

# 提取数据框

data2 = list(map(lambda x:(data['工作地点'][x],eval(re.split('k|K',data['工资'][x])[0])*1000),range(len(data))))

# 提取价格信息

data3 = pd.DataFrame(data2)

# 转化成Geo需要的格式

data4 = list(map(lambda x:(data3.groupby(0).mean()[1].index[x],data3.groupby(0).mean()[1].values[x]),range(len(data3.groupby(0)))))

# 地理位置展示

geo = Geo("全国Python工资布局", "制作人:挖掘机小王子", title_color="#fff", title_pos="left", width=1200, height=600,

background_color='#404a59')

attr, value = geo.cast(data4)

geo.add("", attr, value, type="heatmap", is_visualmap=True, visual_range=[0, 300], visual_text_color='#fff')

# 中国地图Python工资,此分布是最低薪资

geo

全国python工资布局

恭喜你阅读完了本文,相信通过本文的阅读,你已经了解了如何用python编程去采集拉勾网数据并将其可视化,那么你是否会进行举一反三呢?采集智联、boss直聘...感兴趣的话快去试试吧。如果你还有更多python相关的问题,欢迎您来达内Python培训机构进行咨询。

免责声明:内容和图片源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

预约申请免费试听课

填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:python中的for循环在底层是如何开展工作的?
下一篇:运用python代码格式化工具,提高你的工作效率!

如何运用Python编程处理大数据?用Python编程处理大数据的技巧是什么?

Python面向对象编程的知识点都在这了!

Python的高级特征及用法(部分)

听说这些Python知识,很少有人知道!

  • 扫码领取资料

    回复关键字:视频资料

    免费领取 达内课程视频学习资料

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省