一直对python感兴趣,最近想玩玩爬虫,抓拉钩互联网职位招聘信息,然后做点统计什么的,废话不多说,开打开打。
运行环境:
1、win7 32bit
2、pycharm 4.0.4
3、python 3.4
4、google chrome
需要的插件
要抓一个网站的数据,当然要分析这个网站的网页代码是怎么写的,也就是你要的信息数据放在什么位置。
打开拉钩首页,按f12进入网页调试模式,可以发现拉钩把所有的职位都放在了id=sidebar标签下,每个职位都放在<a></a>标签下,所以很容易的就取到了所有职位
其实,可以看拉钩页面的源码,显示比较单一,然后看它的前端页面源码,可以看到,就是用了一个模板,然后发请求,根据返回的数据填入其中就可以了,你可以随意点一个职位链接,在看它的network,看加载页面的那个请求,发现了什么?
它就是用了一个positionajax.json?city=*****的post请求,然后根据返回数据显示的
这说明什么?说明你要他的职位数据,你只要发请求,然后对上面返回的json数据提取就可以了!!不需要处理它的页面!
分析它不同职位的请求,你就会发现,它所需要的参数就是一个当前城市city,当前页号pn,和职位种类kd
所以,只要获取到它所有的城市,所有的职位,然后依次发请求,就可以轻松的获取它所有的招聘信息了.....上面已经获取了所有职位,现在获取所有城市
提取代码
现在有了所有职位分类和所有城市,接下来的任务就是发请求,获取数据了。一开始是用单线程的.....速度可想而知,所以,用各多线程速度会明显提升很多。
python的多线程使用比较简单,需要引入threading.thread 和 queue(队列)
开启多线程
处理函数working()
抓取函数,也就是发请求函数grab()
当然,还得给他们分配任务,接下来就是把所有任务都放在队列中了,根据当前城市和当前职位来创建请求任务
主要的工作都差不多完成了,现在就运行它抓数据去吧
上面给的都是代码片段,可能有些辅助方法没贴出来,这里就把所有的代码都放上来吧。
lagoucrawler类:
mysql connection类:
未完待续....后面统计的之后在写,现在还没做....