爬取招聘数据 | scrapy 前程无忧51job

12 篇文章 7 订阅
订阅专栏

1. 预备知识

python语言,scrapy爬虫基础,正则表达式

2. 抓取目标结构

  1. 职位列表中的以下信息:
    在这里插入图片描述
  2. 点击职位,进入职位详情页中,提取以下信息:
    在这里插入图片描述

3.抓包分析

3.1 抓包分析url地址

先进入到我们的页面中来,选择想要爬取的城市,url地址会发生相应的变化并刷新,如下图所示:
在这里插入图片描述
复制地址栏的url链接地址如下:https://search.51job.com/list/120200,000000,0000,00,9,99,+,2,1.html?lang=c&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare=
根据第三章学到的知识,我们尝试对该url链接进行删减并测试删减后的url是否对访问结果产生影响,测试后删减的url结果如下:

https://search.51job.com/list/120200,000000,0000,00,9,99,+,2,1.html

访问并对比原网页可以发现,删减参数后的url地址所请求的页面,与原url请求的网页相差不大,均存在我们想要提取的信息。
结果如下:
在这里插入图片描述

3.2 分析页码规律

我们先打开删减版的url对应的页面,为了分析页码请求数据的规律,我们先将滑块移到最后,点击抓包工具中的clear按钮,清空当前存在的请求列表,防止之前存在的请求列表对我们的分析进行干扰,最后,点击第二页,查看抓包工具抓取到的url链接,同时注意url地址栏的变化情况,操作如下所示:
在这里插入图片描述
在这里插入图片描述
分析上图,我们可以看到数据依然是通过ajax异步传递的,同时url链接再次变成了众多参数的url,但是这里我们可以发现url地址的变化有非常关键的一点:
原来的url链接:https://search.51job.com/list/120200,000000,0000,00,9,99,+,2,1.html
变成了以下链接:
https://search.51job.com/list/120200,000000,0000,00,9,99,+,2,2.html

3.3分析数据存储位置

我们尝试将抓到的ajax的请求进行访问时,得到了以下结果:
在这里插入图片描述
单独进行这条链接的请求,返回的只能是整个前端的页面数据,并不像我们想象中的是一些json格式的字符串,所以我们没有办法利用上一章实验的思路进行数据提取,只能通过分析url的响应,查找数据存在的位置。
接下来我们尝试查找数据存在的位置,首先,复制前端咱们想要抓取的数据,在全局中搜索这段数据出现的位置以及所对应的url链接,然后抓包工具的network模块找到这条url,按ctrl+f进行搜索,流程如下图所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到数据 是存放在url对应的响应中的script标签下,我们可以尝试用正则表达式进行匹配。

4. 正则表达式的应用

首先,找到想要提取的数据前后的字符存在规律,例如:在本章中,“window.SEARCH_RESULT = ”是json数据前面的字符串,“”是json数据后面的字符串,如下图所示:
在这里插入图片描述
接下来我们要利用正则表达式匹配到两个字符串中间的json数据。新建一个test.py进行测试,提前写好正则表达式,有利于我们提高我们编写scrapy的效率。首先我们将这一行前端代码复制粘贴到我们的代码中,用变量html_str进行存储,如下图所示:

import re
# xxxx是前端中的json数据,数据过长,不易展示
html_str = ' window.__SEARCH_RESULT__ = {"xxxx"}</script> '
# 这里是正则表达式的使用,将想要提取的字符串用(.*?)代替
# 前后分别加上原来相对应的字符即可
json_str = re.findall('window.__SEARCH_RESULT__ = (.*?)</script>', html_str)[0]
# 使用JSON模块 将字符串转化JSON格式的数据
json_dict = json.loads(json_str)
# 查看其中的数据
for i in json_dict['engine_search_result']:
   print(i)

在这里插入图片描述

5. 代码编写

5.1 start_requests

def start_requests(self):
        base_url = "https://search.51job.com/list/200200,000000,0000,00,9,99,%25E5%25A4%25A7%25E6%2595%25B0%25E6%258D%25AE,2,{}.html"
        for i in range(1,21):
            next_page_url = base_url.format(i)
            # print(next_page_url)
            # 发送GET请求
            yield scrapy.Request(
                url=next_page_url,
                callback=self.parse
            )

5.2 正则提取数据

使用正则表达式提取想要的字符串,并使用json将字符串转换为json字典格式的数据,然后使用循环进入json数据列表中提取其中的数据,找到职位详情页的url地址后,再次进行请求该url,获取更多的职位信息。

def parse(self, response):
# 检查随机请求头是否设置成功 
        print(response.requests.headers)
        html_str = response.text
        # . 代表任意一个字符  
# ?代表匹配前面的子表达式0到1次    
# * 代表匹配前面的子表达式人任意次
        json_str = re.findall('window.__SEARCH_RESULT__ = (.*?)</script>', html_str)[0]
        json_dict = json.loads(json_str)
        for data in json_dict['engine_search_result']:
				item = {}
            item['job_name'] = data['job_name']
            item['company_name'] = data['company_name']
            item['job_address'] = data['workarea_text']
            item['salary'] = data['providesalary_text']
            item['job_time'] = data['updatedate']
            # job_need是一个列表
            job_need = data['attribute_text']
            # join函数将上面的列表转换为字符串
            item['job_need'] = ",".join(job_need)
# 提取职位详情页对应的url
            job_detail_url = data['job_href']
            item['job_detail_url'] = job_detail_url
				# 请求职位详情页的url
            yield scrapy.Request(
                url=job_detail_url,
                meta={"item":item},
					 # 传递给新定义的提取详情页信息的url
                callback=self.parse_detail,
            )

5.3 提取职位的详情信息

这里详情页信息是非常常规的网页,直接用xpath就可以提取,没有任何反爬机制,同学们可以自行查看详情页信息进行提取

def parse_detail(self,response):
# 将上一步提取的数据,通过meta传递给item
        item = response.meta['item']
		  # 职位详情信息
        item["company_detail"] = response.xpath("//div[@class='bmsg job_msg inbox']//p/text()").extract()
		  yield item

在这里插入图片描述
保存文件结果如下:
在这里插入图片描述

数据获取直达:十万条数据集 2022/4/30更新
https://download.csdn.net/download/lijiamingccc/85245765

Python案例篇:分析大型招聘网站Python岗
m0_60635283的博客
04-30 294
利用requests库请求得到数据,要主要是否是动态数据别在网上瞎学了,我最近也做了一些资源的更新,只要你是我的粉丝,这期福利你都可拿走。我先来介绍一下这些东西怎么用,文末抱走。(1)Python所有方向的学习路线(新版)这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。最近我才对这些路线做了一下新的更新,知识体系更全面了。(2)Python学习视频。
分分钟51job
weixin_44273084的博客
06-10 3547
python前程(一)步骤:1.解析url2.获url上的内容3.对获的内容进行解析4.对解析后的内容进行存储 步骤: 1.解析url 首先,明确我们的目的:51上所有的python岗位的相关职位信息 这是我们的原始url: https://search.51job.com/list/010000,000000,0000,00,9,99,python,2,3.html?lang=c&postchannel=0000&workyear=99&cotype=99&
51job职位信息
06-02
51job的职位信息,java编的,用的是htmlparser解析,很好用,自己琢磨下就ok了,哦,不过需要JDK6.0的的支持
51job数据采集虫 - 51Job网络虫源码
12-18
说明 采集数据前请先配置数据库文件(在程序目录下的 db.mdb) 打开数据库(db.mdb),打开表 t_config 输入数据库用户名,密码,数据库地址,数据库名称。。。
基于Python的前程、51job、智联招聘招聘网站数据数据分析可视化大全【代码+演示】
迷茫与徘徊只会让你陷入绝境,欢迎私信博主,带你开始提升变现价值!
12-09 2967
总的来说,这些分析揭示了网页等级排名和职位等级排名与职位的具体特征之间的关联。特定类型的职位、公司类型、规模和行业可能会影响它们在搜索结果中的可见度和优先级。综合来看,这些分析结果表明,不同搜索关键词下的职位在HR标签、薪资水平、公司类型和公司规模方面存在显著差异。综上所述,薪资发放次数不仅反映了薪资的发放频率,而且与薪资水平密切相关。更频繁的薪资发放(如包含年终奖的情况)通常意味着更高的总体薪资水平。这些分析为理解职位发布的时间模式提供了直观的视角,有助于求职者或招聘专家理解何时是职位市场最活跃的时段。
51job前程官网)1万条招聘信息的
golden_knife的博客
07-01 7189
以51job网上的一万条电商类招聘信息为样本,具体分析该行业的就业前景、工作地点、平均薪资和任职要求等 本文主要通过词云图和可视化图表对数据进行展示描述 1.先上样本信息图(由于太多,只截了一部分) 第一张图包括了职位名称、公司名称、工作地点、薪资、发布时间(公司的发布时间,我的时候是2020.6.24号)和详情页的url链接;第二张图中就是链接网页的具体内容,描述了该岗位的工作信息和任职要求 。 以下数据可视化全部基于上述的样本信息。 2.词云图展示 (1)工作岗位 通过对职位名称图的观
2024虫 用selenium 51job前程)代码
最新发布
weixin_59178068的博客
01-12 1762
最近想要练习一下虫,但是打开51job的页进行操作发现,地址基本不怎么变化,不太容易提url地址,发现无论是搜索 java 还是 python 地址是不变的,点击页码地址也不会变化。所以用操作地址的虫框架就不太容易操作了,下面是使用selenium51job的具体流程,代码部分几乎每一行都有注释。
一键前程51job招聘网,从此毕设数据不用愁
Barry0124的博客
07-20 1667
此次代码以关键词开发工程师为例,无筛选范围内的岗位数据: 查看网页源码:通过对网站发送申请,获响应数据,进行网页分析,确定数据所在位置。注意这里不能直接定位标签,数据在java-script文本当中,直接定位标签进行解析,最终返回空列表。 这里需要向上定位到script标签,获text文本,实质是以json格式的text文本存在,使用json.loads将文本转化为json格式进行字典value值的提。 这里以20页为例:(网站链接的参数对应不同的页数,这里以循环的page代替页数)
前程51job(动态数据
weixin_48676558的博客
05-02 1366
python
Python3 虫实战 — 前程招聘信息 + 数据可视化
热门推荐
BOB'S BLOG
07-13 1万+
时间:2020-07-11 实现目标:根据用户输入的关键字相关职位信息存入 MongoDB,读数据进行可视化展示。 涉及知识:请求库 requests、Xpath 语法、数据库 MongoDB、数据处理 Numpy、Pandas、数据可视化 Matplotlib。 完整代码:https://github.com/TRHX/Python3-Spider-Practice/tree/master/51job 其他虫实战代码合集(持续更新):https://github.com/TRHX/Pytho.
Python Scrapy 前程招聘
Ryan的博客
07-18 2137
我上一篇博客采用的lxml模块和xpath语法 本篇我将采用 Scrapy.spider 关于Scrapy 首先先要了解点基础 Scrapy是一个为了网站数据,提结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。 其最初是为了 网络抓 所设计的, 也可以应用在获API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络虫。 Spider Spider类定义了如何某个(或某些)网站。包括了
51Job数据
02-01
可以爪51Job招聘信息 用VB写的,初次写虫,请多多包含
51job网站招聘信息
11-05
这是一个51job招聘网站的代码,可以输入关键字想要的各个职业的招聘信息,根据页码制定页数的信息,可以选择存储到TXT,mongodb或者mysql中,代码简单易懂,可阅读性高
crawlSpider页面信息
03-02
本压缩包,是对51job网站的每个工作的详情页信息进行。运用crawlSpider获数据并存储
JobSpiders:scrapy框架51job(scrapy.Spider),智联招聘(扒接口),拉勾网(CrawlSpider)
05-17
第一种直接从网页中获数据,采用的是scrapy的基础虫模块,的是51job 第二种采用扒接口,从接口中获数据的是智联招聘 第三种采用的是整站的,的是拉钩网 获想要的数据并将数据存入mysql数据库中,...
Scrapy框架51job和智联招聘数据信息
02-28
Scrapy框架51job和智联招聘数据信息 Scrapy框架51job和智联招聘数据信息
scrapy51job前程招聘网站的机构信息并存储到xls工作簿中
06-27
scrapy51job前程招聘网站的机构信息并存储到xls工作簿中
51job招聘scrapy
05-16
51job招聘网是中国领先的人才招聘网站之一,其提供的招聘信息涵盖了各行各业的岗位,每天都吸引着大量求职者和企业的关注。而51job招聘网的数据一直是市场研究、人才招聘公司以及求职者所关注的重点。 针对这一需求,开发人员可以使用Python的虫框架Scrapy来进行数据Scrapy有着高效稳定、可定制化强、易于扩展等特点,可以较快地大量的数据。在进行51job时,可以根据需求分析网站结构和数据类型,以较低的成本、较高的质量实现数据的快速提和存储。 具体操作可以遵循以下步骤: 1.分析51job网站,确定需要数据类型和数据格式。这包括招聘信息的标题、公司名称、职位所在地、薪资等基本信息。 2.使用Scrapy框架进行数据,通过代码和Xpath路径表达式实现虫程序的编写,较为注重程序的稳定性和数据效率。 3.在完成数据后,可以使用相关的数据存储技术,如MySQL、MongoDB等,将数据进行存储和管理,以备后续分析。 总体来说,使用Scrapy虫框架进行51job数据是一种高效、专业、稳定的方法,对于市场研究、企业招聘等方面都有着重要意义。对于开发人员来说,熟练掌握这一技术可以进一步提高自身的数据处理能力,并在实践中积累更加专业的数据处理知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 第一章 | 加州房价数据集 | 端到端的机器学习 | 回归问题 | tensorflow2.6+sklearn | 学习笔记 9147
  • win11 | visual studio 2022 | 安装教程 | 创建一个C项目 | 一些建议 8930
  • win11 MongoDB 安装教程 5073
  • Potree | 前端展示点云可视化的框架 4766
  • python蓝桥杯真题刷题打卡 | day4 4689

分类专栏

  • 各种论文学习笔记 付费 2篇
  • 各种问题记录 1篇
  • C/C++ 28篇
  • kaggle平台学习复习 11篇
  • 爬虫 12篇
  • python算法 19篇
  • 数据结构 7篇
  • win11环境下系列工具 3篇
  • 深度学习 14篇
  • 小项目实战 2篇
  • 机器学习实战 10篇
  • git 1篇
  • 可视化工具 3篇
  • 数据分析 2篇

最新评论

  • 考研复试机试 | C++ | 王道机试课程笔记

    m0_63778609: 求机试课资源

  • 微博评论爬虫 | 情感分析 | 词云图展示

    2301_79939294: 博主你好数据可以求一份吗

  • kaggle竞赛 | Quora Insincere Question | 文本情感分析

    馒头-Ws: 你好,可以发一下数据集吗

  • 携程逆向爬虫 | PC网页端 | 旅游景点评论爬虫

    芭卡玛咖: 可以求一下全部代码吗,实在是爬不下来了

  • scrapy+flask+html打造搜索引擎

    fdyitdtufp: 需要flask后端的代码,感谢

大家在看

  • 如何下载PhotoZoom Pro 8软件及详细安装步骤 276
  • Exposure X7中文版安装包下载及安装教程 191
  • 【Vue】v-model双向绑定指令 289
  • leensa邀请码 239
  • HyperSnap软件下载-详细安装教程视频 186

最新文章

  • 多源图像融合——U2Fusion
  • 数据标注专业团队
  • 最全 chrome driver
2024年4篇
2023年36篇
2022年26篇
2021年30篇

目录

目录

评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码魔法师!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

聚圣源photoshop绿色版下载迹部景吾初心使命指的是什么翌景嘉园环保科技类企业起名王维的诗有哪些翱翔的近义词男性起名属金的字八字起名免费取名广告衫厂家起名空间黑色皮肤代码商业名称怎么起特种兵之战狼黎吧啦新荣村客运站起名字测试在线一条狗的使命百度云为什么ipad连不上wifi支付牌照金起头的公司名字我的英雄学院剧场版商品取名起名大全起宝宝取名网起名字打分卜易居女孩起名能用麒麟的字吗kakaku长沙公交车路线查询许姓起名呕心沥血的意思新生儿 五行起名淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化