招聘数据统计网站搭建全纪实

本文详细记录了使用Django框架和PyEcharts库搭建一个招聘数据统计网站的过程,包括如何从API获取数据、处理数据以及自定义PyEcharts的显示效果,最终实现数据的可视化展示。

声明:该项目涉及到的一切东西仅做学习交流使用

正文:

因为想做成一个网站而不是简单的仅仅本地的分析,所以先构思了一下网站,网站首页需要的数据有:职业分类以及各个职业名字

没啥好说的,访问首页,简单的解析即可拿到我们的数据

分类的前面加上----便于区分,职业名不加

接下来是拿数据了,按照正常逻辑,我们打开f12,查看请求返回数据,但是开始解析时候蒙了,返回数据里面没有我们想要的东西,这下麻烦了。它不可能不拿数据,所以数据一定是隐藏起来了,这个时候打开我们的小夜壶,charles

ctrf+f 搜索一波,这里我们从浏览器可以看到有高级Java开发工程师(互联网)这个职业,我们搜索

找到了

在这里,是通过api获得的json数据,那太好了,还省去了在html代码中的解析,速度肯定快的一逼

分析请求url

https://fe-api.zhaopin.com/c/i/sou?start=60&pageSize=60&cityId=489&workExperience=-1&education=-1&companyType=-1&employmentType=-1&jobWelfareTag=-1&kw=Java%E5%BC%80%E5%8F%91&kt=3&_v=0.04066879&x-zp-page-request-id=c83e9ead92984692afd4f6a8c5390d22-1544064629149-133328

start为开始位置,pagesize是一次返回的数据量,cityid是城市,489为全国,workexperience工作经验 -1意思是不限,education 学历,companytype公司类型(民营,国企),再往后两个也是职业描述方面的,都是-1就行了,kw不用说,是我们选取的职业名,kt=3我也不晓得啥玩意儿,照做就是了,再往后的东西一看就是随机的,可以删掉

得出结论 我们每次只需要更改start以及kw,即可获取到不同职业下的很多条数据,贴上核心代码部分

def parse_html(html):
    resource = json.loads(html)
    about_jobs = resource['data']['results']
    for i in range(59):
        base = about_jobs[i]
        company = base['company']
        city    = base['city']
        welfare  = base['welfare']

        company_name = company['name']
        company_url  = company['url']
        company_size = company['size']['name']
        company_type = company['type']['name']
        workingExp   = base['workingExp']['name']
        eduLevel     = base['eduLevel']['name']
        salary       = base['salary']
        emplType     = base['emplType']
        createDate   = base['createDate']
        updateDate   = base['updateDate']
        endDate      = base['endDate']
        address      = city['display']
        daiyu        = ''
        timeState = base['timeState']
        job_name = base['jobType']['display']
        for k in welfare:
            daiyu   = daiyu   + k + ' '
        save_datas('0',job_name,eduLevel,workingExp,salary,emplType,daiyu,company_name,company_type,company_size,address.strip(),company_url,createDate,updateDate,endDate,timeState)

这下拿到数据了,开始我们网站的建设。使用的是django,pyecharts

echarts是百度的开源可视化框架,pyecharts是基于echarts开发,方便python开发者使用

关于pyecharts的使用不再赘述,附上官方网址http://pyecharts.org/#/zh-cn/感谢官方大大

熟悉的配置settings,配置urls,配置models,配置views。

举个栗子:

def javakaifa_fun(request):
    results = javakaifa.objects.all()
    address, salary, edu, exp, keywords,js_list = get_parms(results)
    number = len(results)
    return render(request,'app/baseHtml.html',{'address':address,'salary':salary,'edu':edu,'exp':exp,'keyword':keywords,'js_list':js_list,'number':number})

这是点击Java开发后会进入的view,通过模型对象拿到数据库对应表中的所有数据,再将数据传入get_parms处理函数中处理,返回我们需要的五个图表的js代码以及他们所需要的js依赖,最后将这些数据连同数据量的大小一同传入base.html进行渲染展示。

base.html部分代码

<div class="ui container">
            <div class="ui container" id="address">
                {{ address|safe }}
            </div>
        </div>

每个图表的js放到一个div中,且div对应有一个id,这样js代码才能正确操作div

值得一提的是,一般的返回的js生成的图表在浏览器中是默认位置的,不是自适应居中,所以我对其进行了一些处理

base_add_js1 = '*****'
base_add_js2 = '*****'
def return_add_js2(arg1):
    return r'window.onresize = function () {resizeContainer();myChart_'+arg1+'.resize();};'
def return_add_js1(arg1):
    return u"var "+arg1+"_Container = document.getElementById('"+arg1+"');var resizeContainer = function () {"+arg1+"_Container.style.width = "+arg1+"_Container.clientWidth + 'px';"+arg1+"_Container.style.height = ("+arg1+"_Container.clientWidth)/2 + 'px';};resizeContainer();"
def add_js(result,id):
    global base_add_js2
    result1 = result[101:]
    replace2 = re.search(r'[a-f0-9]{32}', result1).group()
    base_add_js2 = id
    result2 = result1.replace(replace2, id)
    final_result_1 = result2.replace('<script type="text/javascript">','<script type="text/javascript">'+'\n'+return_add_js1(base_add_js1))
    final_result = final_result_1.replace('</script>',return_add_js2(base_add_js2)+'\n'+'</script>')
    return final_result

附上调用部分:

def edu_charte(edu_dic):
    global base_add_js1
    attr, values = get_valus(edu_dic, 10)
    bar = Bar('')
    bar.add('',attr,values)
    base_add_js1 = 'edu'
    return add_js(bar.render_embed(),'edu'),bar.get_js_dependencies()

这样子是肯定不行的,我们查看源代码

在pyecharts\\base.py大概第123行,本来是return Markup(html), Markup注释写的大概是让代码变安全,某些不合法的会被转义掉,这明显不符合我的想法,开玩笑,我可是要对js拼接操作的,所以我修改了源代码,改成了return html。这下就可以用上面的js处理函数来处理,并返回拼接后的js代码,我们再把这些js传到html中,即可居中自适应展示图表。

过程中还有一个问题,生成地图的时候,默认是中国地图,当然我需要的也是中国地图,不影响,但是某些数据的地点可能是国外,也可能不合法的,当然可以在外面进行过滤,我没选择这种方式,没错,我又去改源代码了,加了个try,except,这样如果报错的数据我不要就是了。

好了,到这儿基本结束。网站大功告成

附上网址,有兴趣的可以访问以下:http://132.232.145.114/第一次访问图表页面会异常的慢,请耐心等待,第二次就好了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值