爬虫-广东事业单位招聘报名统计

广东人事考试网登录网址:https://ggfw.gdhrss.gov.cn/sydwbk/index.do

查看报名统计详情竟然不支持搜索和筛选,想看下报名人数还挺费劲,而且要查看岗位信息还要另外单独去查询。。

中间省略N字的吐槽,开搞

第一步先登录,打开查看报名统计详情,然后按F12,到下面页面。

第二步 把代码里面需要修改的数据进行替换成自己的

第三步,运行,输入对应城市的数字,等待即可,需要时间比较长

第四步 保存成功

import pandas as pd
import requests
import time  # 导入 time 模块

def get_exam_data(city_codes, city_code_mapping):
    url = 'https://ggfw.hrss.gd.gov.cn/sydwbk/exam/details/spQuery.do'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.1.4031 SLBChan/11',
        'Cookie': 'JSESSIONID=lmx52NcUOEKnN7cTqSWfQCoCVC_gJZc5vpfYeBALDNoQPyZvBe8m!-1842907079; _gscu_260182935=99415158p4e5gi43; ../issoYH_MASS_TOKEN=6f80f8a3-0682-4460-9964-d638ae5替换成自己的',
        'Host': 'ggfw.hrss.gd.gov.cn',
        'Origin': 'https://ggfw.hrss.gd.gov.cn',
        'Referer': 'https://ggfw.hrss.gd.gov.cn/sydwbk/center.do?nvt=17114414替换成自己的',
        'X-Requested-With': 'XMLHttpRequest'
    }

    all_exam_data = []
    for city_code in city_codes:
        city_name = city_code_mapping[city_code]
        print(f"正在获取{city_name}的数据...")
        page = 1
        while True:
            data = {
                'bfa001': '2412121',
                'bab301': city_code,
                'page': page,
                'rows': 50
            }
            response = requests.post(url, data=data, headers=headers)
            if response.status_code == 200:
                try:
                    page_data = response.json()['rows']
                    all_exam_data.extend(page_data)
                    if len(page_data) < 50:
                        break  # Reached the last page
                    else:
                        page += 1
                except KeyError:
                    print(f"无法解析 {city_name} 的数据。")
                    print(response.text)  # 打印出返回的内容
                    break
            else:
                print(f"Failed to retrieve data for city code: {city_code}. Status code: {response.status_code}")
                print(response.text)  # 打印出返回的内容
                return None
            time.sleep(10)  # 每次请求后等待10秒

    return all_exam_data



def main():
    city_code_mapping = {
        '99': '省直',
        '01': '广州',
        '02': '深圳',
        '03': '珠海',
        '04': '汕头',
        '05': '佛山',
        '06': '韶关',
        '07': '河源',
        '08': '梅州',
        '09': '惠州',
        '10': '汕尾',
        '11': '东莞',
        '12': '中山',
        '13': '江门',
        '14': '阳江',
        '15': '湛江',
        '16': '茂名',
        '17': '肇庆',
        '18': '清远',
        '19': '潮州',
        '20': '揭阳',
        '21': '云浮'
    }

    print("请输入需要查找哪个城市的报名统计:")
    print("99.省直")
    for code in range(1, 22):
        print(f"{code:02d}.{city_code_mapping[str(code).zfill(2)]}")

    city_code_input = input("请输入城市代码或者回车直接查询所有数据:")
    if city_code_input.strip() == "":
        print("按下了回车键,默认查询所有数据。")
        city_codes = ['99'] + [str(code).zfill(2) for code in range(1, 22)]  # 1-21城市代码和99省直代码
    else:
        if city_code_input in city_code_mapping:
            city_codes = [city_code_input]
        else:
            print("输入的城市代码无效,默认查询所有数据。")
            city_codes = ['99'] + [str(code).zfill(2) for code in range(1, 22)]  # 默认查询所有数据

    exam_data = get_exam_data(city_codes, city_code_mapping)  # 传递 city_code_mapping 参数
    if exam_data:
        df = pd.DataFrame(exam_data)
        df = df[['bfe301','aab004', 'aab019', 'aab119' ]]
        df.columns = ['岗位代码','招聘单位', '招考人数', '报名人数' ]
        city_name = city_code_mapping[city_code_input]  # 使用输入的城市代码获取城市名称
        file_name = f"{city_name}报名数据.xlsx"
        df.to_excel(file_name, index=False)
        print(f"数据已保存到 {file_name} 文件中。")


if __name__ == "__main__":
    main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值