数据爬取、预处理及入库
目标设定
输入:职位关键词keyword和城市city_name,如key_word=Python开发,city_name=北京
输出:以输入参数为名的文档,如collections_name=Python开发_北京
爬取路径分析
通过网络抓包分析,页面URL路径为:https://www.zhipin.com/job_detail/?query=PYTHON&city=101010100&page=1
该路径也有其他变种,如city_id由query参数变为path参数,效果一样
关键参数
query:职位关键词
city:城市ID
page:当前页码
注意到参数中的城市ID为内部ID,需要建立城市名称与ID的映射
经过抓包找到了这个映射文件路径,https://www.zhipin.com/wapi/zpCommon/data/city.json
该json分为三部分:热点城市列表、当前所处城市,全国全量省份及城市列表,我们需要的只是全国城市列表,这里需要做下数据预处理
城市ID与名称映射文件预生成
通过上述路径下载的city.json重命名为china.json,然后进行分析处理生成真正的city.json,代码如下:
# -*- coding:utf-8 -*-
import json
import os
# 读取json文件
with open(os.path.join(os.path.dirname(__file__),'china.json'),'r',encoding='utf-8') as f:
china_list=json.loads(f.read())['zpData']
province_dict,city_dict={
},{
}
for province in china_list['cityList']:
province_dict[province['name']]=province['code']
for city in province['subLevelModelList']:
city_dict[city['name']]=city['code']
# 生成省份列表,非必要
with open(os.path.join(os.path.dirname(__file__),'province.json'),'w',encoding='utf-8') as f:
f.write(str(province_dict).replace('\'','"'))
with open(os.path.join(os.path.dirname(__file__),'city.json'),'w'