代码运行展示
开发环境 Windows 10 python3.6
开发工具 pycharm 库 numpy、matplotlib、time、xlutils.copy、os、xlwt, xlrd, random 开发思路 1.打开腾讯招聘的网址右击检查进行抓包,进入网址的时候发现有异步渲染,我们要的数据为异步加载
2.构造起始地址:
参数在headers的最下面
timestamp: 1625641250509
countryId:
cityId:
bgIds:
productId:
categoryId:
parentCategoryId:
attrId: keyword:
pageIndex: 1
pageSize: 10
language:
zh-cn area: cn
3.发送请求,获取响应
self.start_url = 'https://careers.tencent.com/tencentcareer/api/post/Query' # 构造请求参数 params = { # 捕捉当前时间戳 'timestamp': str(int(time.time() * 1000)), 'countryId': '', 'cityId': '', 'bgIds': '', 'productId': '', 'categoryId': '', 'parentCategoryId': '', 'attrId': '', 'keyword': '', 'pageIndex': str(self.start_page), 'pageSize': '10', 'language': 'zh-cn', 'area': 'cn' } headers = { 'user-agent': random.choice(USER_AGENT_LIST) } response = session.get(url=self.start_url, headers=headers, params=params).json()
4.提取数据,获取岗位信息大列表,提取相应的数据
# 获取岗位信息大列表 json_data = response['Data']['Posts'] # 判断结果是否有数据 if json_data is None: # 没有数据,设置循环条件为False self.is_running = False # 反之,开始提取数据 else: # 循环遍历,取出列表中的每一个岗位字典 # 通过key取value值的方法进行采集数据 for data in json_data: # 工作地点 LocationName = data['LocationName'] # 往地址大列表中添加数据 self.addr_list.append(LocationName) # 工作属性 CategoryName = data['CategoryName'] # 往工作属性大列表中添加数据 self.category_list.append(CategoryName) # 岗位名称 RecruitPostName = data['RecruitPostName'] # 岗位职责 Responsibility = data['Responsibility'] # 发布时间 LastUpdateTime = data['LastUpdateTime'] # 岗位地址 PostURL = data['PostURL']
5.数据生成折线图、饼图、散点图、柱状图
# 第一张图:根据岗位地址和岗位属性二者数量生成折线图 # 146,147两行代码解决图中中文显示问题 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 由于二者数据数量不统一,在此进行切片操作 x_axis_data = [i for i in addr_dict.values()][:5] y_axis_data = [i for i in cate_dict.values()][:5] # print(x_axis_data, y_axis_data) # plot中参数的含义分别是横轴值,纵轴值,线的形状,颜色,透明度,线的宽度和标签 plt.plot(y_axis_data, x_axis_data, 'ro-', color='#4169E1', alpha=0.8, linewidth=1, label='数量') # 显示标签,如果不加这句,即使在plot中加了label='一些数字'的参数,最终还是不会显示标签 plt.legend(loc="upper right") plt.xlabel('地点数量') plt.ylabel('工作属性数量') plt.savefig('根据岗位地址和岗位属性二者数量生成折线图.png') plt.show()
# 第二张图:根据岗位地址数量生成饼图 """工作地址饼图""" addr_dict_key = [k for k in addr_dict.keys()] addr_dict_value = [v for v in addr_dict.values()] plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] plt.rcParams['axes.unicode_minus'] = False plt.pie(addr_dict_value, labels=addr_dict_key, autopct='%1.1f%%') plt.title(f'岗位地址和岗位属性百分比分布') plt.savefig(f'岗位地址和岗位属性百分比分布-饼图') plt.show()