千家信息网

Python怎么爬取前程无忧招聘信息

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍"Python怎么爬取前程无忧招聘信息",在日常操作中,相信很多人在Python怎么爬取前程无忧招聘信息问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"P
千家信息网最后更新 2026年11月03日Python怎么爬取前程无忧招聘信息

这篇文章主要介绍"Python怎么爬取前程无忧招聘信息",在日常操作中,相信很多人在Python怎么爬取前程无忧招聘信息问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Python怎么爬取前程无忧招聘信息"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

基本开发环境

  • Python 3.6

  • Pycharm

相关模块的使用

  • requests

  • parsel

  • csv

  • re

安装Python并添加到环境变量,pip安装需要的相关模块即可。

一、明确需求

爬取前程无忧招聘信息


爬取内容:

  • 招聘标题

  • 公司

  • 薪资

  • 城市区域

  • 工作经验要求、学历要求、招聘人数、发布时间、公司福利

  • 岗位职责、任职要求

二、请求网页,先获取所有招聘信息的详情url地址


使用开发者工具发现网页加载出来的内容是乱代码的,这也意味着等会再爬取的时候,是需要转码的,这样看是看不出自己想要的内容网页是否有返回数据,可以复制网页中的数据,在网页源代码里面搜索。

没有结果,那么我们就可以搜索详情链接的ID

里面不仅有ID 还有详情url地址。用正则表达式匹配出ID,然后再拼接url,如果匹配出url地址的话,需要再转一次。

特别声明:
因为网站原因,每一个招聘详细页面url地址,仅仅只是ID的变化,如果ID不是唯一变化值的时候,那取url地址更好。

import requestsimport redef get_response(html_url):    headers = {        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',    }    response = requests.get(url=html_url, headers=headers)    return responsedef get_id(html_url):    response = get_response(html_url)    result = re.findall('"jobid":"(\d+)"', response.text)    print(response.text)    print(result)if __name__ == '__main__':    url = 'https://search.51job.com/list/010000%252C020000%252C030200%252C040000%252C090200,000000,0000,00,9,99,python,2,1.html'    get_id(url)

简单总结

打印 response.text 可以在pycharm里面使用正则匹配规则,可以测试是否有匹配到数据。详情如下图所示

三、解析招聘信息数据,提取内容


每页第一个招聘信息是没有薪资的,没有薪资待遇的,对于没有薪资的招聘信息,我们就自动跳过就好了,所以需要先判断一下。

其次前面有说过,网页查看内容是有乱码的,需要进行转码。

def get_content(html_url):    result = get_id(html_url)    for i in result:        page_url = f'https://jobs.51job.com/shanghai-xhq/{i}.html?s=01&t=0'        response = get_response(page_url)        # 进行转码        response.encoding = response.apparent_encoding        html_data = response.text        selector = parsel.Selector(html_data)        # 薪资        money = selector.css('.cn strong::text').get()        # 判断如果有薪资继续提取相关内容        if money:            # 标题            title = selector.css('.cn h2::attr(title)').get()            # 公司            cname = selector.css('.cname a:nth-child(1)::attr(title)').get()            # 上海-徐汇区  |  5-7年经验  |  本科  |  招1人  |  01-25发布            info_list = selector.css('p.msg.ltype::attr(title)').get().split('  |  ')            city = info_list[0]     # 城市            exp = info_list[1]      # 经验要求            edu = info_list[2]      # 学历要求            people = info_list[3]   # 招聘人数            date = info_list[4]     # 发布时间            # 福利            boon_list = selector.css('.t1 span::text').getall()            boon_str = '|'.join(boon_list)            # 岗位职责:  任职要求:            position_list = selector.css('.job_msg p::text').getall()            position = '\n'.join(position_list)            dit = {                '标题': title,                '公司': cname,                '城市': city,                '经验要求': exp,                '学历要求': edu,                '薪资': money,                '福利': boon_str,                '招聘人数': people,                '发布时间': date,                '详情地址': page_url,            }

四、保存数据(数据持久化)

关于薪资待遇、公司地址这些就用csv保存,岗位职责和任职要求就保存文本格式吧,这样看起来会稍微舒服一些。

保存csv

f = open('python招聘.csv', mode='a', encoding='utf-8', newline='')csv_writer = csv.DictWriter(f, fieldnames=['标题', '公司', '城市', '经验要求', '学历要求',                                           '薪资', '福利', '招聘人数', '发布时间',                                           '详情地址'])csv_writer.writeheader()

保存txt

txt_filename = '岗位职责\\' + f'{cname}招聘{title}信息.txt'with open(txt_filename, mode='a', encoding='utf-8') as f:    f.write(position)

五、多页数据爬取

    '''if __name__ == '__main__':    '''    第一页地址:    https://search.51job.com/list/010000%252c020000%252c030200%252c040000%252c090200,000000,0000,00,9,99,python,2,1.html    第二页地址:    https://search.51job.com/list/010000%252c020000%252c030200%252c040000%252c090200,000000,0000,00,9,99,python,2,2.html    第三页地址:    https://search.51job.com/list/010000%252c020000%252c030200%252c040000%252c090200,000000,0000,00,9,99,python,2,3.html    '''    for page in range(1, 11):        url = f'https://search.51job.com/list/010000%252C020000%252C030200%252C040000%252C090200,000000,0000,00,9,99,python,2,{page}.html'        get_content(url)

实现效果

补充代码

正则匹配替换特殊字符

def change_title(title):    pattern = re.compile(r"[\/\\\:\*\?\"\<\>\|]")  # '/ \ : * ? " < > |'    new_title = re.sub(pattern, "_", title)  # 替换为下划线    return new_title

主函数代码

def main(html_url):    result = get_id(html_url)    for i in result:        page_url = f'https://jobs.51job.com/shanghai-xhq/{i}.html?s=01&t=0'        response = get_response(page_url)        response.encoding = response.apparent_encoding        html_data = response.text        selector = parsel.Selector(html_data)        # 薪资        money = selector.css('.cn strong::text').get()        # 判断如果有薪资继续提取相关内容        if money:            # 标题            title = selector.css('.cn h2::attr(title)').get()            # 公司            cname = selector.css('.cname a:nth-child(1)::attr(title)').get()            # 上海-徐汇区  |  5-7年经验  |  本科  |  招1人  |  01-25发布            info_list = selector.css('p.msg.ltype::attr(title)').get().split('  |  ')            if len(info_list) == 5:                city = info_list[0]  # 城市                exp = info_list[1]  # 经验要求                edu = info_list[2]  # 学历要求                people = info_list[3]  # 招聘人数                date = info_list[4]  # 发布时间                # 福利                boon_list = selector.css('.t1 span::text').getall()                boon_str = '|'.join(boon_list)                # 岗位职责:  任职要求:                position_list = selector.css('.job_msg p::text').getall()                position = '\n'.join(position_list)                dit = {                    '标题': title,                    '公司': cname,                    '城市': city,                    '经验要求': exp,                    '学历要求': edu,                    '薪资': money,                    '福利': boon_str,                    '招聘人数': people,                    '发布时间': date,                    '详情地址': page_url,                }                new_title = change_title(title)                txt_filename = '岗位职责\\' + f'{cname}招聘{new_title}信息.txt'                with open(txt_filename, mode='a', encoding='utf-8') as f:                    f.write(position)                csv_writer.writerow(dit)                print(dit)

到此,关于"Python怎么爬取前程无忧招聘信息"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

招聘 地址 薪资 信息 公司 经验 内容 数据 详情 人数 城市 学历 岗位 岗位职责 时间 标题 福利 网页 职责 前程 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技海报 科技金融是不是互联网金融 金融科技还是互联网 互联网科技集团 火传媒上海互联网科技 互联网养老 桔豆科技 丰台科技园 互联网公司 恒生科技互联网指数分析 华脉科技工业互联网产品 哈尔滨秒房互联网科技有限公司 栖莱科技互联网股份有限公司 河南猎农互联网科技有限公司 辽宁互联网新科技 互联网金融科技名词解释 保险科技服务互联网营销体系 互联网营销推广黑科技 互联网时代科技型公司的机会 容联科技互联网电商 互联网界的黑科技 互联网金融运营模式中的金融科技 南京欣网互联网络科技 联恩商钥互联网科技有限公司 中正互联网科技招聘 海南购全球互联网科技 互联网科技公司的市场部门 哈尔滨新华互联网科技学院 青海科技产业互联网发展 互联网数据科技专业 西安有哪些互联网高科技企业 颐高云石互联网科技
0