从json串中获取某个值_利用爬虫快速获取招聘信息

利用爬虫快速获取招聘信息

1、背景

目前工作在技能和前景上双双陷入瓶颈,想在各大招聘的要求里找到市场上人才缺口所需要的能力。那么获取招聘信息详情便是至关重要的。刚好一直有想学习的爬虫的意愿,就带着这份目的开始练练手,从自己的需求到落地做个小小的实现

2、目标网站

招聘的目标网站还是贴合自己兴趣和行业的为主。本人做过一些简单AI和大数据项目,恰好这两个又与云计算又强烈的关联。于是就以腾讯云作为目标,开始搜集一些相关的信息啦。

3、分析目标

首先来到腾讯招聘的网站,通过其搜索功能来确定自己想要查询的范围,我这里利用关键字搜索腾讯云,以及网页的筛选项产品类作为目标。

154013d893846f0280e20a920af2e485.png

通过F12的调试模式,可以轻松过得到网页访问的接口。分析这串URL也可以轻松的看到请求的参数。包括国家id,城市id等等啦。

e8f11618a1237fe665f8ba62ff70adaf.png

https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1589618623927&countryId=&cityId=&bgIds=&productId=&categoryId=40003001&parentCategoryId=&attrId=&keyword=%25E8%2585%25BE%25E8%25AE%25AF%25E4%25BA%2591&pageIndex=1&pageSize=10&language=zh-cn&area=cn

同样我们也可以获取到这个请求所返回的参数,这里包括搜索页面里的所有招聘标题及简介。

94fce5e1ac517274155d2d6827a99936.png

当然这里只是所有招聘信息的列表,我们需要的是更加详细的信息,所以进入每个单独的招聘页面里,在同上方法如法炮制,可以得到单个详情页面里的信息。

7a88742a8cd166ae3b84d56507c77b4a.png

93b5ffde11c237bce6aeae5eb2e7eaff.png

https://careers.tencent.com/tencentcareer/api/post/ByPostId?timestamp=1589619483194&postId=1175057848963436544&language=zh-cn

通过这个接口我们不难发现,所有的招聘信息都有自己的PostId,只要找到其相应的PostId,就能抓取到其所有的信息。

那么我们只需要通过搜索页面获得所有PostId,再封装请求,就能拿到所有的招聘信息了。

4、开始动手

4.1抓取PostId

首先,遍历搜索结果,把每一页的PostId抓取下来。

import requests
postIds = []
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'}
# 遍历12页
for i in range(12):
    try:
        #page_num 页码
        page_num=i
        base_url='https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1586676680776&countryId=&cityId=&bgIds=&productId=&categoryId=40003001&parentCategoryId=&attrId=&•keyword=%25E8%2585%25BE%25E8%25AE%25AF%25E4%25BA%2591&pageIndex='+str(page_num)+'&pageSize=10&language=zh-cn&area=cn'
        print(page_num,base_url)
        res=requests.get(base_url,headers=headers)
        res_json=res.json()
        re=res.json()
        #获取Json串中Key Data所包含的信息
        data = re["Data"]
        posts = data["Posts"]
        for post in posts:
            postId = post["PostId"]
            postIds.append(postId)
    except BaseException:
        print("out of range")
        
postIds=list(set(postIds))
print(postIds,len(postIds))
    

可以看到我们获取的所有页与PostId

09864c86afcd746283bf2c34f2080b54.png

4.2利用PostId获得所有招聘信息

有了所有的PostId,就可以开始循环发送请求,获得相应的Json结果,再从Json里解析出我们想要的参数信息。在这里我选择将所有的信息,写入本地文件夹。

information={}
num=0
for postid in postIds:
    careers_url="https://careers.tencent.com/tencentcareer/api/post/ByPostId?timestamp=1586679925635&postId="+postid+"&language=zh-cn"
    rep = requests.get(careers_url)
    rep_json=rep.json()
    re=rep.json()
    datas = re["Data"]
    fpath="D:/Recruit.txt"
    num=num+1
    print(num)
    with open(fpath, 'a+',encoding='utf-8') as f:
        f.write(str(num)+'n'+
                str(postid)+'n'+
                datas["RecruitPostName"]+'n'+
                datas["LocationName"]+'n'+
                datas["BGName"]+'n'+
                datas["CategoryName"]+'n'+
                datas["Responsibility"]+'n'+
                datas["Requirement"]+'n'+
                datas["LastUpdateTime"]+'n'+
                "-------------------------------"+'n'
               ) 
        f.close()  

最后的结果截图。

9d5572e3441e6048cb30f1b0795a0b6d.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值