版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验五招聘网站信息抓取可视化分析实验实验五招聘网站信息抓取可视化分析一、概述爬取51job招聘网站中关于“python”相关的职位信息爬取后的数据以csv表格形式保存并进行可视化展示。二、爬虫概述1.上网过程解析(1)普通用户:打开浏览器,输入网址并发送请求,接收响应数据,网页页面展示。(2)爬虫程序:模拟浏览器,输入网址并发送请求,接收响应数据,提取有用的数据,保存到本地/数据库。2.爬虫的过程(1)发送请求(requests模块)(2)获取响应数据(服务器返回)(3)解析并提取数据(re正则或者BeautifulSoup查找)(4)保存数据python爬虫是大家最为熟悉的一种python应用途径,由于python具有丰富的第三方开发库,所以它可以开展很多工作:比如web开发(django)、应用程序开发(tkinter、wxpython、qt)、数据统计与计算(numpy)、图形图像处理、深度学习、人工智能等。三、模块及库文件1.request模块requests是python实现的简单易用的HTTP库。requests.get(url)可以发送一个httpget请求,返回服务器响应内容。2.安装库文件pipinstallrequestpipinstallfake_useragentpipinstallre3.图表绘制模块pipinstallpyecharts四、数据爬取爬取招聘信息网站中关于“python”的所有招聘信息,返回页面数据。1.快速构建反爬请求和cookies,通过re正则式解析数据导入包importrequestsimportreimportjsonimportpprintfromfake_useragentimportUserAgent在招聘网站中搜索“python”,在该页面按F12打开开发者工具打开network(网络)标签并按Ctrl+R刷新页面,按照图步骤获取URL(bash)。获取URL(bash)打开Convertcurlcommandstocode()网站,按Ctrl+V粘贴,将会解析出如图并快速构建header、cookies。快速构建header、cookies和requests将构建好的cookies、headers和params粘贴,以字典格式保存cookies={}headers={}params={}headers['User-Agent']=UserAgent().Chrome
response=requests.get(url=f'/list/000000,000000,0000,00,9,99,python,2,1.html',params=params,headers=headers,cookies=cookies)
parse_data=re.findall('"engine_jds":(.*?),"jobid_count"',response.text)parse_data_dict=json.loads(parse_data[0])
pprint.pprint(parse_data_dict)根据解析出的数据如图所示,网站保存的信息种类可以如下划分:'公司名字','职位名字','薪资','工作地点','招聘要求','公司待遇','招聘更新时间','招聘发布时间','公司人数','公司类型','companyind_text','job_href','company_href'。re正则式解析数据2.爬取网站数据,保存为表格导入包importrequestsimportreimportjsonimportcsvimporttimefromrandomimportrandomfromfake_useragentimportUserAgent定义关键词和cookies、headers和paramskey_word='python'page=10#爬取网站的页数,可根据自己的需求更改页数cookies={}headers={}params={}数据抓取file_path=f'./testData51job招聘信息.csv'f_csv=open(file_path,mode='w',encoding='utf-8',newline='')fieldnames=['公司名字','职位名字','薪资','工作地点','招聘要求','公司待遇','招聘更新时间','招聘发布时间','公司人数','公司类型','companyind_text','job_href','company_href']dict_write=csv.DictWriter(f_csv,fieldnames=fieldnames)dict_write.writeheader()error_time=0#在判断职位名字中是否没有关键字的次数,这里定义出现200次时,循环结束forpageinrange(1,10+1):print(f'第{page}页抓取中……')try:time.sleep(random()*3)#这里随机休眠一下(0-3秒),简单反爬处理headers['User-Agent']=UserAgent().Chromeresponse=requests.get(f'/list/000000,000000,0000,00,9,99,{key_word},2,{page}.html',params=params,headers=headers,cookies=cookies)parse_data=re.findall('"engine_jds":(.*?),"jobid_count"',response.text)##根据"jobid_count"获取每一项招聘信息parse_data_dict=json.loads(parse_data[0])except:print(f'\033[31m第{page}页获取数据失败!\033[0m')print('\033[31m可更换cookies后再尝试!!!\033[0m')continueforiinparse_data_dict:###处理异常,爬取多页时,可能是网站某些原因会导致这里的结构变化try:companyind_text=i['companyind_text']exceptExceptionase:#print(f'\033[31m异常:{e}\033[0m')companyind_text=Nonedic={'公司名字':i['company_name'],'职位名字':i['job_name'],'薪资':i['providesalary_text'],'工作地点':i['workarea_text'],'招聘要求':''.join(i['attribute_text']),'公司待遇':i['jobwelf'],'招聘更新时间':i['updatedate'],'招聘发布时间':i['issuedate'],'公司人数':i['companysize_text'],'公司类型':i['companytype_text'],'companyind_text':companyind_text,'job_href':i['job_href'],'company_href':i['company_href'],}if'Python'indic['职位名字']or'python'indic['职位名字']:dict_write.writerow(dic)print(dic['职位名字'],'——保存完毕!')else:error_time+=1iferror_time==200:breakiferror_time>=200:breakprint('抓取完成!')f_csv.close()五、利用pyecharts进行数据可视化1.柱状图导入库importpandasaspdfrompyechartsimportoptionsasoptsfrompyecharts.chartsimportBarpandas读取csv表格以dataframe格式保存,读取’工作地点’字段python_data=pd.read_csv('./testData51job招聘信息.csv')python_data['工作地点']=[i.split('-')[0]foriinpython_data['工作地点']]city=python_data['工作地点'].value_counts()绘制柱状图,展示Python招聘岗位所在城市分布情况c=(Bar().add_xaxis(city.index.tolist())#城市列表数据项.add_yaxis("Python",city.values.tolist())#城市对应的岗位数量列表数据项.set_global_opts(title_opts=opts.TitleOpts(title="Python招聘岗位所在城市分布情况"),datazoom_opts=[opts.DataZoomOpts(),opts.DataZoomOpts(type_="inside")],xaxis_opts=opts.AxisOpts(name='城市'),#设置x轴名字属性yaxis_opts=opts.AxisOpts(name='岗位数量'),#设置y轴名字属性).render("bar_datazoom_both.html"))结果如图所示。Python招聘岗位所在城市分布情况柱状图2.地图导入库importpandasaspdimportcopyfrompyechartsimportoptionsasoptsimportrequestsimportjsonfrompyecharts.chartsimportMap获取全国地图header={"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/94.0.4606.81Safari/537.36",}response=requests.get('/weather2020/search/city.js',headers=header)result=json.loads(response.text[len('varcity_data='):])print(result)each_province_data={}f=open('./中国省份_城市.txt',mode='w',encoding='utf-8')fork,vinresult.items():province=kifkin['上海','北京','天津','重庆']:city=','.join(list(v[k].keys()))else:city=','.join(list(v.keys()))f.write(f'{province}_{city}\n')each_province_data[province]=cityf.close()print(each_province_data)pandas读取csv表格以dataframe格式保存,读取’工作地点’字段python_data=pd.read_csv('./testData51job招聘信息.csv')python_data_deepcopy=copy.deepcopy(python_data)#深复制一份数据python_data['工作地点']=[i.split('-')[0]foriinpython_data['工作地点']]city=python_data['工作地点'].value_counts()city_list=[list(ct)forctincity.items()]统计全国省份的招聘信息defprovince_city():'''这是从接口里爬取的数据'''area_data={}withopen('./中国省份_城市.txt',mode='r',encoding='utf-8')asf:forlineinf:line=line.strip().split('_')area_data[line[0]]=line[1].split(',')province_data=[]forctincity_list:fork,vinarea_data.items():foriinv:ifct[0]ini:ct[0]=kprovince_data.append(ct)area_data_deepcopy=copy.deepcopy(area_data)forkinarea_data_deepcopy.keys():area_data_deepcopy[k]=0foriinprovince_data:ifi[0]inarea_data_deepcopy.keys():area_data_deepcopy[i[0]]=area_data_deepcopy[i[0]]+i[1]province_data=[[k,v]fork,vinarea_data_deepcopy.items()]best=max(area_data_deepcopy.values())returnprovince_data,bestprovince_data,best=province_city()绘制地图,展示Python招聘岗位——全国分布情况#地图_中国地图(带省份)Map-VisualMap(连续型)c2=(Map().add("Python",province_data,"china").set_global_opts(title_opts=opts.TitleOpts(title="Python招聘岗位——全国分布情况"),visualmap_opts=opts.VisualMapOpts(max_=int(best/2)),).render("map_china.html"))结果如图所示。Python招聘岗位全国分布情况地图3.饼图读取库frompyechartsimportoptionsasoptsfrompyecharts.chartsimportPieimportpandasaspdpandas读取csv表格以dataframe格式保存,读取’招聘要求’字段python_data=pd.read_csv('./testData51job招聘信息.csv')require_list=[]rl=require_list.appendforiinpython_data['招聘要求']:if'经验'ini:rl(i.split('')[1])else:rl('未知')python_data['招聘要求']=require_listrequire=python_data['招聘要求'].value_counts()require_list=[list(ct)forctinrequire.items()]print(require_list)绘制饼图,展示工作经验要求的统计信息c=(Pie().add("",require_list,radius=["40%","55%"],label_opts=opts.LabelOpts(position="outside",formatter="{a|{a}}{abg|}\n{hr|}\n{b|{b}:}{c}{per|{d}%}",background_color="#eee",border_color="#aaa",border_width=1,border_radius=4,rich={"a":{"color":"#999","lineHeight":22,"align":"center"},"abg":{"backgroundColor":"#e3e3e3","width":"100%","align":"right","height":22,"borderRadius":[4,4,0,0],},"hr":{"borderColor":"#aaa","width":"100%","borderWidth":0.5,"height":0,},"b":{"fontSize":16,"lineHeight":33},"per":{"color":"#eee","backgroundColor":"#334455","padding":[2,4],"borderRadius":2,},},),).set_global_opts(title_opts=opts.TitleOpts(title="工作经验要求"),legend_opts=opts.LegendOpts(padding=20,pos_left=500),).render("pie_rich_label.html"))绘制饼图,展示招聘信息中学历要求的统计信息xueli_list=[]xl=xueli_list.appendforiinpython_data['招聘要求']:iflen(i.split(''))==3:xl(i.split('')[2])else:xl('未知')python_data['招聘要求']=xueli_listxueli_require=python_data['招聘要求'].value_counts()xueli_require_list=[list(ct)forctinxueli_require.items()]c=(Pie().add("",xueli_require_list,radius=["30%","55%"],rosetype="area",).set_global_opts(title_opts=opts.TitleOpts(title="学历要求")).render("pie_rosetype.html"))结果如图所示。Python招聘岗位工作经验要求饼图Python招聘岗位学历要求饼图4.折线图读取库importpandasaspdimportrepandas读取csv表格以dataframe格式保存,读取’薪资’字段python_data=pd.read_csv('./testData51job招聘信息.csv')sal=python_data['薪资']xin_zi1=[]xin_zi2=[]xin_zi3=[]xin_zi4=[]xin_zi5=[]xin_zi6=[]forsinsal:s=str(s)if'千'ins:xin_zi1.append(s)else:ifre.findall('-(.*?)万',s):s=float(re.findall('-(.*?)万',s)[0])if1.0<s<=1.5
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 娱乐产业制作人项目KPI考核表
- 电子商务平台运营经理电商运营专员绩效衡量表
- 交通物流智能系统开发人员绩效考评表
- 量子计算岗位绩效考核表
- 小学主题班会课件:诚实与守信的音符
- 安全教育入心警钟长鸣小学五年级主题班会课件
- 设计部门工作成果绩效评定表
- 生产主管质量监督考核表
- 数据分析平台标准化手册
- 电商运营专员销售与流量管理KPI考核表
- 安全风险分级管控与隐患排查治理制度
- 《中央管理企业负责人薪酬制度改革方案》
- 忠诚承诺情侣保证书
- 人体八大系统与生理功能
- 技术交底-施工图现场技术交底
- 哈萨克斯坦劳动法中文版
- 三大构成说课
- 神经系统查体PPT
- 皮下气肿的学习课件
- 胸痛中心数据填报平台的管理与质控课件
- GB/T 6311-1986大量程百分表
评论
0/150
提交评论