假如你正在找工作,那么如何有针对性的找,才可以更容易呢,比如去哪个城市,比如找什么工作等,这里就以找Go语言的工作为例,通过大数据分析下Go开发的岗位,这样才更有针对性,才可以更容易找到工作。
加入阿里云钉钉群享福利:每周技术直播,定期群内有奖活动、大咖问答
拉勾
这里分析以拉勾网上的数据为准,通过使用Go语言编写一个拉勾网岗位的爬虫,抓取Go语言的所有岗位,来进行分析。正好我们也是找Go语言工作,顺便用Go语言练练手。
该爬虫比较简单,只需要根据拉勾网的搜索,然后一页页的爬取搜索结果,把结果整理成Excel输出即可。这里我们选取了岗位名称、工作地点、薪水以及招聘公司这几个元素进行爬取,收集这些信息进行分析。
本次分析,爬取了拉勾网上所有Go语言岗位,一共30页,450个岗位进行分析,所以结果也是很有代表性的。
工作地点
从上图来看,450个Go语言的岗位,北京最多,占了186个,其次是上海83个,深圳52个,杭州31个,所以找Go语言的工作还是去北京、上海、深圳这些一线大城市,尤其是北京,一枝独秀,说明Go语言在北京的发展还是非常好的,学习和分享氛围也不错。
招聘公司
该图表选择了一些招聘Go语言岗位多的公司进行分析,发现其中最多的是瓜子二手车,一个公司发布了19个Go语言开发的岗位,估计整个公司都快转Go语言了。
其次是滴滴公司,一共有13个在招聘Go语言的岗位,也是非常多了,看来滴滴对Go语言的推动力度很大。
除此之外,美团、百度、UCloud以及腾讯等公司都有3-5个Go语言的岗位在招聘,说明这些公司也陆陆续续开始用Go语言做一些适合的业务。
薪水分布
薪水分布分析也过滤了分布比较少的区间,保留了主要的薪水区间。
从图表上看薪水开到15K-30K的Go语言岗位有71个,是岗位最多的薪水分布;其次是15K-25K的占51个;10K-20K的有49个。基本上一个Go语言开发都是上万。
此外,20K以上的Go语言岗位有89个,占总共450个岗位的近20%;25K以上的有31个,也占了总岗位的7%左右,比例也不算太低。
所以从这个看,Go语言做好了,20K以上也是非常轻松,最多可以开到50K。
经验要求
这个我保留了,没有分析,留给大家试试,看是1-3年的多,还是3-5年的多。
源代码
该代码只可用于学习研究之用,不可用于其他用途。
该爬取拉勾职位的Go语言爬虫,基于pholcus这个爬虫框架编写,是一个pholcus的爬取拉勾职位的规则库,大家使用的时候和正常的pholcus规则库是一样的,import导入引用即可。
package main
import(
"github.com/henrylee2cn/pholcus/exec"
_ "flysnow.org/hello/lib"
)
func main() {
exec.DefaultRun("web")
}
启动使用Web的方式进行启动。启动后可以看到一个Web网页,也就是浏览器里打开 http://localhost:9090/,选择 单机模式运行,勾选左侧的拉勾规则,然后选择输出Excel格式,记得线程不要开太多,2个即可,暂停时间5000ms,防止被拉勾的反爬虫机制拦截。
然后等待一会,就会抓取完毕,获得一个包含所有职位的Excel输出,根据这个输出的Excel结果分析即可。
完整的拉勾爬虫规则如下:
package lib
// 基础包
import (
"github.com/henrylee2cn/pholcus/app/downloader/request" //必需
"github.com/henrylee2cn/pholcus/common/goquery" //DOM解析
. "github.com/henrylee2cn/pholcus/app/spider" //必需
"strings"
"net/http"
)
//修改这个为其他岗位的,可以爬取其他岗位的数据
const positionURL = "https://www.lagou.com/zhaopin/go/?filterOption=3"
func init() {
header.Add("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8")
header.Add("Accept-Encoding","gzip, deflate, br")
header.Add("Accept-Language","zh-CN,zh;q=0.8,en;q=0.6,fr;q=0.4,tr;q=0.2,zh-TW;q=0.2")
header.Add("Connection","keep-alive")
header.Add("Cookie","user_trace_token=20170910220432-f801c133-9630-11e7-8e11-525400f775ce; LGUID=20170910220432-f801c565-9630-11e7-8e11-525400f775ce; index_location_city=%E5%85%A8%E5%9B%BD; JSESSIONID=ABAAABAAADEAAFI27EBBC4DCA6B9DBD97414B0004A32D4F; TG-TRACK-CODE=index_navigation; _gat=1; PRE_UTM=; PRE_HOST=; PRE_SITE=https%3A%2F%2Fwww.lagou.com%2Fzhaopin%2Fgo%2F3%2F%3FfilterOption%3D2; PRE_LAND=https%3A%2F%2Fwww.lagou.com%2Fzhaopin%2Fgo%2F4%2F%3FfilterOption%3D3; SEARCH_ID=418a46d847344429b67029bc1470f19c; _gid=GA1.2.1008155537.1505828050; Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1505052272,1505828050; Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1505830015; _ga=GA1.2.319466696.1505052272; LGSID=20170919220506-8a4a46e3-9d43-11e7-99b2-525400f775ce; LGRID=20170919220655-cb047879-9d43-11e7-99b2-525400f775ce")
header.Add("DNT","1")
header.Add("Host","www.lagou.com")
header.Add("Referer","https://www.lagou.com/")
header.Add("Upgrade-Insecure-Requests","1")
header.Add("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 9_3_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3112.113 Safari/535.36\"")
lagou.Register()
}
var lagou = &Spider{
Name:"拉勾-岗位",
Description:"拉勾上的全部岗位【https://www.lagou.com】",
EnableCookie:true,
NotDefaultField:true,
RuleTree:lagouRuleTree,
}
var header = http.Header{}
var lagouRuleTree = &RuleTree{
Root: func(ctx *Context) {
ctx.AddQueue(&request.Request{
Url:positionURL,
TryTimes:10,
Rule:"requestList",
Header:header,
})
},
Trunk:map[string]*Rule{
"requestList":{
ParseFunc: func(ctx *Context) {
header.Set("Referer",ctx.Request.Url)
nextSelection:=ctx.GetDom().Find("div.pager_container").Find("a").Last();
url,_:=nextSelection.Attr("href")
if len(url)!=0 && strings.HasPrefix(url,"http"){
ctx.AddQueue(&request.Request{
Url:url,
TryTimes:10,
Rule:"requestList",
Priority:1,
Header:header,
})
}
ctx.Parse("outputResult")
},
},
"outputResult":{
ItemFields:[]string{
"岗位",
"薪水",
"工作地点",
"公司",
},
ParseFunc: func(ctx *Context) {
dom:=ctx.GetDom()
dom.Find("div.list_item_top").Each(func(i int, selection *goquery.Selection) {
jobName:=selection.Find("div.p_top").Find("h3").Text()
city:=selection.Find("div.p_top").Find("em").Text()
city=strings.Split(city,"·")[0]
salay:=selection.Find("div.p_bot").Find("span.money").Text()
company:=selection.Find("div.company").Find("a").Text()
ctx.Output(map[int]interface{}{
0: jobName,
1:salay,
2:city,
3:company,
})
})
},
},
},
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。