Python爬虫入门:如何爬取招聘网站并进行分析

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

0前言工作之余,时常会想能做点什么有意思的玩意。互联网时代,到处都是互联网思维,大数据、深度学习、人工智能,这些新词刮起一股旋风。所以笔者也赶赶潮流,买了本Python爬虫书籍研读起来。网络爬虫,顾名思义就是将互联网上的内容按照自己编订的规则抓取保存下来。理论上来讲,浏览器上只要眼睛能看到的网页内容都可以抓起保存下来,当然很多网站都有自己的反爬虫技术,不过反爬虫技术的存在只是增加网络爬虫的成本而已,所以爬取些有更有价值的内容,也就对得起技术得投入。1案例选取人有1/3的时间在工作,有一个开心的工作,那么1/3的时间都会很开心。所以我选取招聘网站来作为我第一个学习的案例。前段时间和一个老同学聊天,发现他是在从事交互设计(我一点也不了解这是什么样的岗位),于是乎,我就想爬取下前程无忧网(招聘网_人才网_找工作_求职_上前程无忧)上的交互设计的岗位需求:2实现过程我这里使用scrapy框架来进行爬取。2.1程序结构C:\Users\hyperstrong\spiderjob_jiaohusheji│scrapy.cfg│└─spiderjob│items.py│pipelines.py│settings.py│__init__.py│middlewares.py├─spiders│jobSpider.py│__init__.py其中:items.py是从网页抽取的项目jobSpider.py是主程序2.2链接的构造用浏览器打开前程无忧网站招聘网_人才网_找工作_求职_上前程无忧,在职务搜索里输入“交互设计师”,搜索出页面后,观察网址链接:【交互设计师招聘】前程无忧手机网_触屏版=1&keyword=%E4%BA%A4%E4%BA%92%E8%AE%BE%E8%AE%A1%E5%B8%88&keywordtype=2&lang=c&stype=2&postchannel=0000&fromType=1&confirmdate=9网址链接中并没有页码,于是选择第二页,观察链接:红色标记的为页码,于是可以通过更改此处数字来实现从“第1页”到第44页“的网页自动跳转。当然读者也可以通过网页内容抓取处下一页的链接进行自动翻页,有兴趣的网友可以试下:2.3网页分析我要抓取的几个数据分别是职位名公司名工作地点薪资发布时间截图如下,右侧是浏览器-开发者工具(F12)里查找的源代码,和网页对应查看:2.4数据字段:items.py#-*-coding:utf-8-*-#Defineherethemodelsforyourscrapeditems#Seedocumentationin:#(scrapy.Item):#definethefieldsforyouritemherelike:#name=scrapy.Field()jobname=scrapy.Field()companyname=scrapy.Field()workingplace=scrapy.Field()salary=scrapy.Field()posttime=scrapy.Field()2.5主要运行程序我是用的python2.7编写的,并且使用XPath表达式进行数据的筛选和提取。#-*-coding:utf-8-*-fromscrapyimportRequestfromscrapy.spidersimportSpiderfromspiderjob.itemsimportSpiderjobItemclassjobSpider(Spider):name='jobSpider'headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/49.0.2623.75Safari/537.36LBBROWSER','Accept':'text/css,*/*;q=0.1','Accept-Encoding':'gzip,deflate,sdch','Accept-Language':'zh-CN,zh;q=0.8','Referer':'close','Host':'js.51jobcdn.com'};defstart_requests(self):url1='='.html?lang=c&stype=1&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=1&dibiaoid=0&address=&line=&specialarea=00&from=&welfare='url=url1+'1'+url2yieldRequest(url,headers=self.headers)defparse(self,response):item=SpiderjobItem()jobs=response.xpath('//div[@class=dw_table]/div[@class=el]')forjobinjobs:item['companyname']=job.xpath('.//span[@class=t2]/a[@target=_blank]/text()').extract()[0]item['workingplace']=job.xpath('.//span[@class=t3]/text()').extract()[0]item['salary']=job.xpath('.//span[@class=t4]/text()').extract()item['posttime']=job.xpath('.//span[@class=t5]/text()').extract()[0]item['jobname']=job.xpath('.//p[@class=t1]/span/a[@target=_blank]/text()').extract()[0]yielditemforiinrange(2,44):url1='='.html?lang=c&stype=1&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=1&dibiaoid=0&address=&line=&specialarea=00&from=&welfare='next_url=url1+str(i)+url2yieldRequest(next_url,headers=self.headers,callback=self.parse)2.6抓取效果:在开始运行里输入里cmd,修改路径为C:\Users\hyperstrong\spiderjob_jiaohusheji。然后输入scrapycrawljobSpder-ojiaohusheji.csv3数据进行简单分析从excel表格里抽取2个特征:薪资和城市分析不同城市的交互设计岗位平均薪资分析不同城市对于交互设计岗位需求,即在该城市是否容易找到工作说干就干,代码奉上:#!/usr/bin/python#-*-coding:UTF-8-*-importpandasaspdimportnumpyasnpfromdatetimeimportdatetimeimportmatplotlib.pyplotaspltimportsysimportreimportcsvimportstringdefanalyze_job_demand(filepath):data=pd.read_csv(filepath)wp=[]num=len(data['workingplace'])foriinrange(0,num-1):a=data['workingplace'].ix[i].decode('utf-8')b=a[0:2].encode('utf-8')wp.append(b)bj=wp.count('北京')sh=wp.count('上海')gz=wp.count('广州')sz=wp.count('深圳')wh=wp.count('武汉')cd=wp.count('成都')cq=wp.count('重庆')zz=wp.count('郑州')nj=wp.count('南京')sz1=wp.count('苏州')hz=wp.count('杭州')xa=wp.count('西安')dl=wp.count('大连')qd=wp.count('青岛')cs=wp.count('长沙')nc=wp.count('南昌')hf=wp.count('合肥')nb=wp.count('宁波')km=wp.count('昆明')last=num-bj-sh-gz-sz-wh-cd-cq-nj-sz1-hz-xa-cs-hfprint(u'武汉的交互设计相关岗位占全国的需求比例为:'+str(float(wh)/num*100)+'%')print(u'苏州的交互设计相关岗位占全国的需求比例为:'+str(float(sz1)/num*100)+'%')print(u'杭州的交互设计相关岗位占全国的需求比例为:'+str(float(hz)/num*100)+'%')print(u'合肥的交互设计相关岗位占全国的需求比例为:'+str(float(hf)/num*100)+'%')print(u'长沙的交互设计相关岗位占全国的需求比例为:'+str(float(cs)/num*100)+'%')print(u'北京的交互设计相关岗位占全国的需求比例为:'+str(float(bj)/num*100)+'%')print(u'上海的交互设计相关岗位占全国的需求比例为:'+str(float(sh)/num*100)+'%')print(u'广州的交互设计相关岗位占全国的需求比例为:'+str(float(gz)/num*100)+'%')print(u'深圳的交互设计相关岗位占全国的需求比例为:'+str(float(sz)/num*100)+'%')print(u'重庆的交互设计相关岗位占全国的需求比例为:'+str(float(cq)/num*100)+'%')print(u'成都的交互设计相关岗位占全国的需求比例为:'+str(float(cd)/num*100)+'%')print(u'南京的交互设计相关岗位占全国的需求比例为:'+str(float(nj)/num*100)+'%')print(u'西安的交互设计相关岗位占全国的需求比例为:'+str(float(xa)/num*100)

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功