当前位置: 首页 > 后端技术 > Python

#宝守级课程#拉勾网职位需求关键词抓取并生成统计图表

时间:2023-03-26 15:12:28 Python

大家好,我是查理。知己知彼,方能百战无殆。在学习技术的时候,我们往往会面临太多的选择而不知所措。可能是我们各个方面都有所涉猎,没有深入研究某个领域。似乎我们无所不能。肘部张开。如果能够从招聘岗位所需要的技能中学习到,我们就能苦练内功,为实际应用打下良好的基础。我们的目的是通过python抓取拉勾网的招聘明细,筛选出技能关键词存储到excel中。1、获取职位需求数据通过观察可以发现,拉勾网的职位页面详情由http://www.lagou.com/jobs/+*****(PositionId).html组成,并且PositionId可以通过JsonXHRget来解析。红框内的jobdescription就是我们要抓取的数据。知道了数据来源,接下来就是按照通常的步骤打包Headers,提交FormData获取反馈数据。获取PositionId列表所在的页面:#获取该位置的查询页面,(参数为URL,当前页码,关键字)defget_page(url,pn,keyword):headers={'User-Agent':'Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/45.0.2454.85Safari/537.36115Browser/6.0.3','Host':'www.lagou.com','Connection':'keep-alive','Origin':'http://www.lagou.com'}ifpn==1:boo='true'else:boo='false'page_data=urllib.urlencode([('first',boo),('pn',pn),('kd',关键字)])req=urllib2.Request(url,headers=headers)page=urllib2.urlopen(req,data=page_data.encode('utf-8')).read()page=page.decode('utf-8')returnpage通过Json获取PositionId:#获取需要的职位ID,每个招聘页面详情都有一个ID索引所属的defread_id(page):tag='positionId'page_json=json.loads(page)page_json=page_json['content']['positionResult']['result']company_list=[]foriinrange(15):company_list.app结束(page_json[i].get(tag))returncompany_listsynthetictargeturl:#获取职位页面,将positionId和BaseUrl组合成目标地址defget_content(company_id):fin_url=r'http://www.lagou.com/jobs/%s.html'%company_idheaders={'User-Agent':'Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)''Chrome/45.0.2454.85Safari/537.36115Browser/6.0.3','Host':'www.lagou.com','Connection':'keep-alive','Origin':'http://www.lagou.com'}req=urllib2.Request(fin_url,headers=headers)#page=urllib.urlopen(req).read()page=urllib2.urlopen(req).read()content=page.decode('utf-8')returncontent2.处理数据获取数据后,你需要清理数据。BeautifulSoup捕获的工作内容包含Html标签。有必要从数据中去除这层“外衣”。#获取职位需求(通过re去除html标签),可以单独存储职位详情defget_result(content):soup=Bs(content,'lxml')job_description=soup.select('dd[class="job_bt"]')job_description=str(job_description[0])rule=re.compile(r'<[^>]+>')result=rule.sub('',job_description)returnresult现在得到的数据是职位描述信息,我们需要从职位信息中筛选出我们关注的职位需求关键词。我们过滤掉这些关键词,存入List中。在爬取了全部500多个职位后,我们得到了一份工作技能关键字的总列表。#过滤关键字:目前的过滤方式只选择英文关键字defsearch_skill(result):rule=re.compile(r'[a-zA-z]+')skil_list=rule.findall(result)returnskil_listtothekey词按照500+职位需求出现频率排序,选取Top80的关键词,剔除无效关键词。#对出现的关键词进行统计排序,选取Top80关键词作为数据样本defcount_skill(skill_list):foriinrange(len(skill_list)):skill_list[i]=skill_list[i].lower()count_dict=Counter(skill_list).most_common(80)returncount_dict3.存储和可视化数据#存储结果并生成区域图defsave_excel(count_dict,file_name):book=xlsxwriter.Workbook(r'E:\positions\%s.xls'%file_name)tmp=book.add_worksheet()row_num=len(count_dict)foriinrange(1,row_num):ifi==1:tag_pos='A%s'%itmp.write_row(tag_pos,['关键字','频率'])else:con_pos='A%s'%ik_v=list(count_dict[i-2])tmp.write_row(con_pos,k_v)chart1=book.add_chart({'type':'area'})chart1.add_series({'name':'=Sheet1!$B$1','categories':'=Sheet1!$A$2:$A$80','values':'=Sheet1!$B$2:$B$80'})chart1.set_title({'name':'关键词排名'})chart1.set_x_axis({'name':'keyword'})chart1.set_y_axis({'name':'频率(/times)'})tmp.insert_chart('C2',chart1,{'x_offset':15,'y_offset':10})book.close()数据可视化展示如果发现错误或者看不懂的地方,可以提出评论区吧,一起交流吧!如果文章对你有帮助,点赞+关注,你的支持是我最大的动力