前言多图预警,多图预警,多图预警。秋招季,毕业生多,跳槽多。我们的职业发展还是要顺应市场需求,那么深圳各种编程语言的需求是什么?工资怎么样?上次写完这篇文章,zone用Python告诉你深圳的房租到底有多高。我想继续用Python来分析一下深圳现在的就业市场怎么样?顺便帮一下秋招的同学。于是爬取了一个拖钩的招聘数据。下面是本次爬虫的样本数据:本次样本统计数据量为4658条,一个hook最多可以显示30页数据,每页有15条招聘信息,所以总数为:30x15=450首页抓取跳过一页,共有435条,基本抓取到数据。剩下的语言不够用,因为深圳那种语言的招聘信息就那么多。根据统计结果,各语言平均薪资为精准推荐、自然语言、机器学习、Go语言、图像识别。!!平均工资相当高。区块链炒的挺火的,貌似平均工资没那么高。数完之后,我觉得我落后了,妈!!!我要删库跑路!(注:下图为月薪,单位:K)每个语言的平均薪水是通过平均薪水:一个hook项的***值和***值,取平均值,如图如图,薪水为:(10k+20k)/2=15k***,然后是整体平均。公司福利词云,福利丰富,有带薪休假、下午茶、零食、节假日等。福利词云企业发展水平排名普遍从A轮缩水到D轮,大部分企业不需要融资。嗯,估计拿不到资本融资,但是他们家有钱。公司发展水平工作年限要求每种语言的学历要求看你母语的市场需求是多少?你达标了吗?其中三五年的攻城狮职位还挺多的,不怕找不到工作。另一个趋势是薪水越高,对学历的要求也越高。看来教育还是很重要的。JavaJavaJava学历要求PythonPython工作经验要求Python学历要求C语言C语言工作经验要求C语言学历要求机器学习机器学习工作经验要求机器学习教育要求图像识别图像识别工作经验要求图像识别学历要求自然语言NaturalLanguage工作经验要求自然语言教育要求区块链区块链工作经验要求区块链教育要求Go语言Go语言工作经验要求GoPHPHHP工作经验要求PHP教育要求爬虫技术分析请求库:seleniumHTML解析:BeautifulSoup、xpathwordsCloud:wordcloud数据可视化:pyecharts数据库:MongoDB数据库连接:pymongo爬虫代码实现看完统计结果,是不是迫不及待想尝试一下呢?想自己实现以下代码?下面是代码实现。在网页上右击,点击查看,找到一项数据:网页源代码数据库存储结构:/*1*/{"_id":ObjectId("5b8b89328ffaed60a308bacd"),"education":"本科",#学习要求"companySize":"2000多人",#公司规模"name":"Python开发工程师",#职位名称"福利":""朝九晚五,公司平台大,发展机会多,六险一金"",#公司福利"salaryMid":12.5,#工资上限和工资下限的平均值"companyType":"移动互联网",#公司类型"salaryMin":"10",#工资下限"salaryMax":"15",#工资上限"experience":"经验3-5年",#工作年限"companyLevel":"无需融资",#公司级别"company":“XXX科技有限公司”#公司名称}由于篇幅原因,以下仅展示主要代码:#获取网页源数据#language=>编程语言#city=>city#collectionType=>value:True/FalseTrue=>数据库表以编程语言命名False=>以城市命名defmain(self,language,city,collectionType):print("当前爬取的语言是=>"+language+"当前爬取的城市is=>"+city)url=self.getUrl(language,city)browser=webdriver.Chrome()browser.get(url)browser.implicitly_wait(10)foriinrange(30):selector=etree.HTML(browser.page_source)#获取源码soup=BeautifulSoup(browser.page_source,"html.parser")span=soup.find("div",attrs={"class":"pager_container"}).find("span",attrs={"action":"next"})print(span)#一页classArr=span['class']print(classArr)#输出为->['pager_next','pager_next_disabled']attr=list(classArr)[0]attr2=list(classArr)[1]ifattr2=="pager_next_disabled":#分析发现当class属性为['pager_next','pager_next_disabled']时,无法点击[下一页]按钮print("已经爬了***一个页面,爬虫结束")breakelse:print("还有一个页面,爬虫继续")browser.find_element_by_xpath('//*[@id="order"]/li/div[4]/div[2]').click()#点击[下一页]按钮time.sleep(5)print('第{}页被抓取'.format(i+1))self.getItemData(selector,language,city,collectionType)#解析item数据存入数据库browser.close()爬虫分析实现#获取各语言样本数defgetLanguageNum(self):analycisList=[]forindex,languageinenumerate(self.getLanguage()):collection=self.zfdb["z_"+language]totalNum=collection.aggregate([{'$group':{'_id':'','total_num':{'$sum':1}}}])totalNum2=list(totalNum)[0]["total_num"]analycisList.append(totalNum2)return(self.getLanguage(),analycisList)#获取每种语言的平均工资defgetLanguageAvgSalary(self):analysisList=[]forindex,languageinenumerate(self.getLanguage()):collection=self.zfdb["z_"+language]totalSalary=collection.aggregate([{'$group':{'_id':'','total_salary':{'$sum':'$salaryMid'}}}])totalNum=collection.aggregate([{'$group':{'_id':'','total_num':{'$sum':1}}}])totalNum2=list(totalNum)[0]["total_num"]totalSalary2=list(totalSalary)[0]["total_salary"]analycisList.append(round(totalSalary2/totalNum2,2))return(self.getLanguage(),analycisList)#GetoneLanguageacademicrequirements(pyecharts的词云)defgetEducation(self,language):results=self.zfdb["z_"+language].aggregate([{'$group':{'_id':'$education','weight':{'$sum':1}}}])educationList=[]weightList=[]forresultinresults:educationList.append(result["_id"])weightList.append(result["weight"])#print(list(result))return(educationList,weightList)#获取一种语言的工作年限要求(pyecharts的词云)defgetExperience(self,language):results=self.zfdb["z_"+language].aggregate([{'$group':{'_id':'$experience','weight':{'$sum':1}}}])totalAvgPriceDirList=[]forresultinresults:totalAvgPriceDirList.append({"value":result["weight"],"name":result["_id"]+""+str(result["weight"])})returntotalAvgPriceDirList#获取福利数据,用于构建福利词云defgetWelfare(self):content=''queryArgs={}projectionFields={'_id':False,'welfare':True}#用字典指定languageinself.getLanguage():collection=self.zfdb["z_"+language]searchRes=collection.find(queryArgs,projection=projectionFields).limit(1000)forresultinsearchRes:print(result["welfare"])content+=result["welfare"]returncontent#获取公司级别排名(针对柱状图)defgetAllCompanyLevel(self):levelList=[]weightList=[]newWeightList=[]attrList=["A轮","B轮","C轮","D轮及以上","无需融资","上市公司"]forlanguageinself.getLanguage():collection=self.zfdb["z_"+language]#searchRes=collection.find(queryArgs,projection=projectionFields).limit(1000)results=collection.aggregate([{'$group':{'_id':'$companyLevel','weight':{'$sum':1}}}])forresultinresults:levelList.append(result["_id"])weightList.append(result["weight"])forindex,attrinenumerate(attrList):newWeight=0forindex2,levelinenumerate(levelList):ifattr==level:newWeight+=weightList[index2]newWeightList.append(newWeight)return(attrList,newWeightList)