利用爬虫快速获取招聘信息
1、背景
目前工作在技能和前景上双双陷入瓶颈,想在各大招聘的要求里找到市场上人才缺口所需要的能力。那么获取招聘信息详情便是至关重要的。刚好一直有想学习的爬虫的意愿,就带着这份目的开始练练手,从自己的需求到落地做个小小的实现
2、目标网站
招聘的目标网站还是贴合自己兴趣和行业的为主。本人做过一些简单AI和大数据项目,恰好这两个又与云计算又强烈的关联。于是就以腾讯云作为目标,开始搜集一些相关的信息啦。
3、分析目标
首先来到腾讯招聘的网站,通过其搜索功能来确定自己想要查询的范围,我这里利用关键字搜索腾讯云,以及网页的筛选项产品类作为目标。
通过F12的调试模式,可以轻松过得到网页访问的接口。分析这串URL也可以轻松的看到请求的参数。包括国家id,城市id等等啦。
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
同样我们也可以获取到这个请求所返回的参数,这里包括搜索页面里的所有招聘标题及简介。
当然这里只是所有招聘信息的列表,我们需要的是更加详细的信息,所以进入每个单独的招聘页面里,在同上方法如法炮制,可以得到单个详情页面里的信息。
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
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()
最后的结果截图。