自动化爬虫:requests定时爬取前程无忧最新职位

小白学大数据
• 阅读 47

引言 在互联网招聘行业,前程无忧(51job)作为国内领先的招聘平台之一,汇聚了大量企业招聘信息。对于求职者、猎头或数据分析师来说,实时获取最新的招聘信息至关重要。 手动收集数据效率低下,而通过Python编写自动化爬虫,可以定时爬取前程无忧的最新职位,并存储到数据库或本地文件中,便于后续分析。本文将介绍如何使用Python requests库结合定时任务,实现自动化爬取前程无忧招聘数据。 技术方案概述

  1. requests库:发送HTTP请求,获取网页数据。
  2. BeautifulSoup:解析HTML,提取关键信息。
  3. pandas:数据清洗与存储(CSV/Excel)。
  4. APScheduler:定时任务调度,实现自动化爬取。
  5. 代理IP与User-Agent:应对反爬机制。 实现步骤
  6. 分析前程无忧网页结构 前程无忧的招聘列表页URL通常为: 其中关键参数: ● python:搜索关键词 ● 2,1.html:第2页,每页50条数据 目标数据字段 ● 职位名称 ● 公司名称 ● 工作地点 ● 薪资范围 ● 发布时间 ● 职位详情链接
  7. 安装依赖库
  8. 编写爬虫代码 (1) 发送请求并解析HTML import requests from bs4 import BeautifulSoup import pandas as pd from apscheduler.schedulers.blocking import BlockingScheduler import time

headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" }

def fetch_jobs(keyword="python", pages=1): base_url = "https://search.51job.com/list/000000,000000,0000,00,9,99,{},2,{}.html" job_list = []

for page in range(1, pages + 1):
    url = base_url.format(keyword, page)
    response = requests.get(url, headers=headers)
    soup = BeautifulSoup(response.text, 'html.parser')

    jobs = soup.find_all('div', class_='j_joblist')  # 根据实际HTML结构调整

    for job in jobs:
        title = job.find('span', class_='jname').text.strip()
        company = job.find('a', class_='cname').text.strip()
        location = job.find('span', class_='d at').text.strip()
        salary = job.find('span', class_='sal').text.strip()
        pub_date = job.find('span', class_='time').text.strip()
        link = job.find('a', class_='el')['href'].strip()

        job_list.append({
            "职位名称": title,
            "公司名称": company,
            "工作地点": location,
            "薪资范围": salary,
            "发布时间": pub_date,
            "详情链接": link
        })

    time.sleep(2)  # 避免请求过快被封

return job_list

(2) 存储数据到CSV def save_to_csv(jobs, filename="51job_jobs.csv"): df = pd.DataFrame(jobs) df.to_csv(filename, index=False, encoding='utf_8_sig') # 防止中文乱码 print(f"数据已保存至 {filename}") (3) 设置定时任务(每天爬取一次) def scheduled_job(): print("开始爬取前程无忧最新职位...") jobs = fetch_jobs(keyword="python", pages=3) # 爬取3页数据 save_to_csv(jobs) print("爬取完成!")

if name == "main": scheduler = BlockingScheduler() scheduler.add_job(scheduled_job, 'interval', days=1) # 每天执行一次 print("定时爬虫已启动,按 Ctrl+C 退出") try: scheduler.start() except KeyboardInterrupt: scheduler.shutdown() 4. 应对反爬策略 前程无忧可能会检测频繁请求,因此需要:

  1. 设置随机User-Agent(使用fake_useragent库)。
  2. 使用代理IP(如requests+proxies)。
  3. 控制请求间隔(time.sleep)。 优化后的请求代码 from fake_useragent import UserAgent import requests from bs4 import BeautifulSoup import pandas as pd from apscheduler.schedulers.blocking import BlockingScheduler import time

代理配置

proxyHost = "www.16yun.cn" proxyPort = "5445" proxyUser = "16QMSOML" proxyPass = "280651"

proxyMeta = f"http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}" proxies = { "http": proxyMeta, "https": proxyMeta, }

headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" }

def get_random_ua(): ua = UserAgent() return ua.random

def fetch_jobs(keyword="python", pages=1): base_url = "https://search.51job.com/list/000000,000000,0000,00,9,99,{},2,{}.html" job_list = []

for page in range(1, pages + 1):
    url = base_url.format(keyword, page)
    try:
        # 使用随机User-Agent和代理
        headers["User-Agent"] = get_random_ua()
        response = requests.get(url, headers=headers, proxies=proxies, timeout=10)
        response.raise_for_status()  # 检查请求是否成功

        soup = BeautifulSoup(response.text, 'html.parser')
        jobs = soup.find_all('div', class_='j_joblist')  # 根据实际HTML结构调整

        for job in jobs:
            title = job.find('span', class_='jname').text.strip()
            company = job.find('a', class_='cname').text.strip()
            location = job.find('span', class_='d at').text.strip()
            salary = job.find('span', class_='sal').text.strip()
            pub_date = job.find('span', class_='time').text.strip()
            link = job.find('a', class_='el')['href'].strip()

            job_list.append({
                "职位名称": title,
                "公司名称": company,
                "工作地点": location,
                "薪资范围": salary,
                "发布时间": pub_date,
                "详情链接": link
            })

        time.sleep(2)  # 避免请求过快被封

    except Exception as e:
        print(f"第{page}页请求失败: {e}")
        continue

return job_list

def save_to_csv(jobs, filename="51job_jobs.csv"): df = pd.DataFrame(jobs) df.to_csv(filename, index=False, encoding='utf_8_sig') # 防止中文乱码 print(f"数据已保存至 {filename}")

def scheduled_job(): print("开始爬取前程无忧最新职位...") jobs = fetch_jobs(keyword="python", pages=3) # 爬取3页数据 save_to_csv(jobs) print("爬取完成!")

if name == "main": scheduler = BlockingScheduler() scheduler.add_job(scheduled_job, 'interval', days=1) # 每天执行一次 print("定时爬虫已启动,按 Ctrl+C 退出") try: scheduler.start() except KeyboardInterrupt: scheduler.shutdown() 总结 本文介绍了如何使用Python requests + BeautifulSoup + APScheduler构建自动化爬虫,定时爬取前程无忧的最新招聘数据,并存储到CSV文件。 扩展优化方向

  1. 数据存储到数据库(MySQL/MongoDB)。
  2. 邮件通知(爬取完成后发送最新职位信息)。
  3. 多关键词爬取(如Java、数据分析等)。
  4. 结合Scrapy框架提高爬取效率。 通过自动化爬虫,可以高效获取招聘市场动态,适用于求职分析、竞品调研、行业趋势研究等场景。
点赞
收藏
评论区
推荐文章
python爬虫增加多线程获取数据
Python爬虫应用领域广泛,并且在数据爬取领域处于霸主位置,并且拥有很多性能好的框架,像Scrapy、Request、BeautifuSoap、urlib等框架可以实现爬行自如的功能,只要有能爬取的数据,Python爬虫均可实现。数据信息采集离不开Pyt
智造进化论▪第六期 | Base深圳 12万程序员都在期待的招聘会来啦
2021年夏天,智联猎头携手平安科技、顺丰、大疆、中兴通讯、OPPO、长亮科技等数十家知名互联网公司,提供包括Java开发、前端研发、软件测试、大数据、产品经理等在内的数百个职位,帮助400多名求职者与用人单位在现场高效沟通,快速进入谈薪入职阶段。往期招聘会盛况▲来自部分已收到offer的往期求职者▲2021年9月4日(下周六)14:0017:00深圳▪南
Wesley13 Wesley13
3年前
50 行代码教你爬取猫眼电影 TOP100 榜所有信息
对于Python初学者来说,爬虫技能是应该是最好入门,也是最能够有让自己有成就感的,今天,恋习Python的手把手系列,手把手教你入门Python爬虫,爬取猫眼电影TOP100榜信息,将涉及到基础爬虫架构中的HTML下载器、HTML解析器、数据存储器三大模块:HTML下载器:利用requests模块下载HTML网页;HTML解析器:利用re正则表达
Stella981 Stella981
3年前
Scrapy笔记(1)
Scrapy笔记01入门篇  Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。其最初是为了页面抓取(更确切来说,网络抓取)所设计的,也可以应用在获取API所返回的数据(比如WebServices)或者通用的网络爬虫。  Scr
如何应对亚马逊反爬机制
大家都知道亚马逊是全球最大的购物平台很多商品信息、用户评价等等都是最丰富的。但是对于爬虫来说,亚马逊的反爬机制应该也是数一数二的,想要获取亚马逊数据的人很多,但是真的能成功的确是少数,所以今天小编就手把手带大家,越过亚马逊的各种反爬机制爬取你想要的商品、评论等等有用信息。这里我们可以通过以下一些步骤去实现亚马逊数据的获取。一、使用requests的get请求
曼成 曼成
1年前
企业招聘信息查询API:招聘市场情报站,一键了解就业机会
在当今这个信息爆炸的时代,快速、准确地获取企业招聘信息对于求职者来说至关重要。为了满足这一需求,企业招聘信息查询API应运而生,它为求职者提供了一个便捷、高效的平台,帮助用户快速了解企业的招聘动态。本文将详细介绍企业招聘信息查询API的功能、优势以及如何使用该API。
linbojue linbojue
1年前
用php轻松爬微信文章,附完整代码
微信公众号成为了现代人获取资讯的主要途径之一,然而每天需要手动打开公众号查看最新文章,不仅费时费力,而且易错漏。那么有没有一种方法可以自动化地获取微信文章呢?答案是有的,只需要使用php编写爬虫程序即可。本文将详细介绍如何使用php爬取微信文章,并提供完整
小白学大数据 小白学大数据
4个月前
用Scrapy精准爬取BOSS直聘特定行业职位
BOSS直聘作为国内领先的招聘平台,拥有海量的职位信息,对于求职者、招聘者以及行业分析师来说,这些数据具有极高的价值。本文将详细介绍如何使用Scrapy框架精准爬取BOSS直聘上特定行业的职位信息,并在爬虫中集成代理服务器以提高爬取的稳定性和安全性。一、项
近屿智能 近屿智能
1个月前
校招80%为AI岗位,AI 人才争夺战打响,学AI首选近屿智能
目前,互联网大厂已经开启了扩大招揽AI人才的新周期。官网信息显示,字节跳动在招岗位1万个,其中与AI直接相关的岗位达到2353个;百度社会招聘岗位1357个,357个职位信息与AI相关;腾讯在招岗位2567个,332个职位也与AI直接相关。阿里国际招聘官网
小白学大数据
小白学大数据
Lv1
男 · 亿牛云 · python技术
宁为代码类弯腰,不为bug点提交!
文章
107
粉丝
5
获赞
18