文章目录

  • 前言
  • 一、列表页URL获取
  • 二、详情页URL获取
  • 三、获取数据
  • 总结

前言

利用Python requets+selenium 爬取智联招聘中全国招聘数据。如果看过我之前的文章那应该知道我们之前写过一个纯用selenium来爬智联招聘的爬虫


提示:以下是本篇文章正文内容,下面案例可供参考

我的目的是需要进入页面获取招聘详情页的链接,通过链接再将数据进行爬取

一、列表页URL获取

下方是列表页的url,其中jl后可直接用省份代替,kw即为搜索的关键词,p表示页数

https://sou.zhaopin.com/?jl=532&kw=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90&p=1
修改后:
https://sou.zhaopin.com/?jl=省份&kw=关键词&p=页数

但是有一点特别重要,我们要想实现全站爬取,必然离不开循环,但是每一个省份对应的总页数是不一样的,我们必须获取每一个省份对应的总页数 然后制造一个url列表以此获取详情页链接


但是就如上图,其总页数是被隐藏的,这时我想到的方法是,利用selenium访问在页数框中输入一个远大于页数的值,他就会自动返回页数,其中有一点要注意,智联招聘每输入一个网址访问就会让你重新扫码登陆一次,所以在第一次访问页面获取cookie,供下次访问使用

def Get_Page(self):page_list=[]listCookies=[]print("开始获取省份对应最大页数")for jl in self.jl_list:url="https://sou.zhaopin.com/?jl=%s&kw=%s"%(jl,self.keyword)if len(listCookies) >0:for cookie in listCookies[0]:self.bro.add_cookie(cookie)else:passself.bro.get(url)sleep(9)listCookies.append(self.bro.get_cookies())try:self.bro.execute_script('window.scrollTo(0, document.body.scrollHeight)')  # 向下拉动一屏self.bro.find_element_by_xpath('//div[@class="soupager__pagebox"]/input[@type="text"]').send_keys(1000)  # 在页数框中输入远大于页数的值button=self.bro.find_element_by_xpath('//div[@class="soupager__pagebox"]/button[@class="soupager__btn soupager__pagebox__gobtn"]')self.bro.execute_script("arguments[0].click();", button)self.bro.execute_script('window.scrollTo(0, document.body.scrollHeight)')  # 向下拉动一屏page = self.bro.find_element_by_xpath('//div[@class="soupager"]/span[last()]').textexcept Exception as e:print(e)page=1passpage_list.append(page)self.bro.quit()return page_list

我们知道了列表url的构成以及获取了每个省份的最大页数,于是我们可以批量准确的生成列表url,我用“数据分析”为关键词,最后获取了300多个列表url

def Get_list_Url(self):list_url=[]print("开始拼接列表页url")for a, b in zip(self.jl_list,self.Get_Page()):for i in range(int(b)):url = "https://sou.zhaopin.com/?jl=%s&kw=%s&p=%d" % (a,self.keyword,int(b))with open("list_url.txt","a", encoding="utf-8") as f:f.write(url)f.write("\n")list_url.append(url)print("共拼接%d个列表页url"%(len(list_url)))return list_url

现在我们呢已经有了列表url,这样我们就可以访问url以此获取其每个招聘信息的详情页url

二、详情页URL获取

我们通过访问所有的列表url目的是为了获取每一个招聘信息的详情url,右键检查元素可发现,详情列表就在url a标签中


对此我们可以写代码

def Parser_Url(self, url):list_header = {'user-agent': '','cookie': ''}try:text = requests.get(url=url, headers=list_header).texthtml = etree.HTML(text)urls = html.xpath('//div[@class="joblist-box__item clearfix"]/a[1]/@href')for url in urls:with open("detail_url.txt","a", encoding="utf-8") as f:f.write(url)f.write("\n")except Exception as e:print(e)pass

现在我们需要通过列表url获取详情url

def Get_detail_Url(self):print("开始获取详情页url")with open("list_url.txt","r",encoding="utf-8") as f:list_url=f.read().split("\n")[0:-1]for url in list_url:self.Parser_Url(url)

三、获取数据

我拿到了七千多条详情url,最后我们就可以利用这些url去获取数据

先写一个解析数据函数

def Parser_Data(self,text):html = etree.HTML(text)dic = {}try:dic["name"] = html.xpath('//h3[@class="summary-plane__title"]/text()')[0]except:dic["name"] = ""try:dic["salary"] = html.xpath('//span[@class="summary-plane__salary"]/text()')[0]except:dic["salary"] = ""try:dic["city"] = html.xpath('//ul[@class="summary-plane__info"]/li[1]/a/text()')[0]except:dic["city"] = ""with open(".//zhilian.csv", "a", encoding="utf-8") as f:writer = csv.DictWriter(f, dic.keys())writer.writerow(dic)

最后我们通过详情页url调用解析数据函数

def Get_Data(self):print("开始获取数据")detail_header = {'user-agent': '','cookie': ''}with open("detail_url.txt","r",encoding="utf-8") as f:detail_url=f.read().split("\n")[0:-1]for url in detail_url:'''使用selenium访问'''# self.bro.get(url)# self.Parser_Data(self.bro.page_source)'''使用requests访问'''# text=requests.get(url,headers=detail_header,proxies={"http":'http://213.52.38.102:8080'}).text# self.Parser_Data(text)sleep(0.2)

如果使用requests访问就需要修改请求头信息

总结

利用requests+selenium的方法 加快了获取数据的速度,相较于之前 纯利用selenium的方式极大的缩短了时间

最后,我篇就说过 我之前写过一个智联招聘的爬虫,但是只是使用selenium去获取数据,现在又写了一个稍微好点的,我会把两个代码都放在公众号“阿虚学Python”中回复“智联爬虫”获取

谢谢大家的观看,如果觉得不错 点个赞吧

爬虫项目十七:用Python轻松爬下智联招聘七千条招聘信息相关推荐

  1. 用Python轻松爬下智联招聘七千条招聘信息!

    前言 利用Python requets+selenium 爬取智联招聘中全国招聘数据.如果看过我之前的文章那应该知道我们之前写过一个纯用selenium来爬智联招聘的爬虫 我的目的是需要进入页面获取招 ...

  2. python+selenium爬取智联招聘信息

    python+selenium爬取智联招聘信息 需求 准备 代码 结果 需求 老板给了我一份公司名单(大概几百家如下图),让我到网上看看这些公司分别在招聘哪些岗位,通过分析他们的招聘需求大致能推断出我 ...

  3. 使用python动手爬取智联招聘信息并简单分析

    根据使用场景,网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种 通用网络爬虫,是捜索引擎抓取系统(Baidu.Google.Yahoo等)的重要组成部分.主要目的是将互联网上的网页下载到本地,形成一个互联 ...

  4. python scrapy爬取智联招聘的公司和职位信息(一)

    这个帖子先暂时放弃.本以为和拉钩一样全是静态页面,结果在写item的时候,发现网页有点意思,突然有个大胆的想法,想试试-先埋坑,后面在填坑 缘由: 最近在找工作发现智联和51上太多培训机构的虚假招聘信 ...

  5. 给大家整理了一篇Python+selenium爬取智联招聘的职位信息

    整个爬虫是基于selenium和Python来运行的,运行需要的包 1 mysql,matplotlib,selenium 需要安装selenium火狐浏览器驱动,百度的搜寻. 整个爬虫是模块化组织的 ...

  6. python scrapy爬取智联招聘全站的公司和职位信息(二)

    从网页中提取相关信息 **公司页面**: 公司的url,公司名称,规模,行业,在招岗位数量,邀面试数 1. 在scrapy shell中调试 在terminal/CMD中输入 scrapy shell ...

  7. 克服反爬虫机制爬取智联招聘网站

    一.实验内容 1.爬取网站: 智联招聘网站(https://www.zhaopin.com/) 2.网站的反爬虫机制:     在我频繁爬取智联招聘网站之后,它会出现以下文字(尽管我已经控制了爬虫的爬 ...

  8. python爬虫实例之爬取智联招聘数据

    这是作者的处女作,轻点喷.... 实习在公司时领导要求学习python,python的爬虫作为入门来说是十分友好的,话不多说,开始进入正题. 主要是爬去智联的岗位信息进行对比分析出java和pytho ...

  9. python爬虫多url_Python爬虫实战入门六:提高爬虫效率—并发爬取智联招聘

    之前文章中所介绍的爬虫都是对单个URL进行解析和爬取,url数量少不费时,但是如果我们需要爬取的网页url有成千上万或者更多,那怎么办? 使用for循环对所有的url进行遍历访问? 嗯,想法很好,但是 ...

最新文章

  1. 献给那些怀揣IT梦想的北漂一族
  2. ansible 介绍
  3. Webstrom卡顿问题解决
  4. 给SAP Spartacus开源项目提交代码时的注意事项
  5. 桌面图标设计里的计算机是灰色的,小技巧教您如何将Windows 10上的桌面图标设置中的回收站为灰色!...
  6. java使用哪个类,怎么知道 java类从哪个jar 加载
  7. word中装订线位置_Word操作技巧:Word文档双面打印全攻略,解决打印难题
  8. H5中 时间格式NAN-NAN-NAN
  9. 怎样增加Dave 英语学习小组
  10. 再见,2016,你好,2017
  11. 设计模式之中介者备忘录原型访问者
  12. 解决Linux下路径过长一行无法显示的问题
  13. 视频教程-ThinkPHP5.0项目实战-PHP
  14. [读书笔录]解析卷积神经网络(魏秀参)——目录和绪论
  15. 科创板在6月的这30天:方邦电子等31家过会并提交注册 新受理28家
  16. Rme娃娃脸声卡驱动安装设置方法
  17. LU分解、矩阵求逆与解线性方程组(matlab代码)
  18. 代码粘贴至word后,黑色背景处理
  19. python中模块和包是什么_python的模块和包的详细说明
  20. 浅谈产品原型制作与设计方法

热门文章

  1. Web前端————微博主页模仿
  2. 学习Word2vec
  3. 吐血整理,rabbitmp超简单下载安装
  4. 液压传感器的工作原理及特点
  5. JTS-Coordinate 使用说明(三)
  6. ubuntu+for+android华为荣耀,华为荣耀magic book(锐龙版)安装ubuntu系统
  7. Python 库学习笔记—— BeautifulSoup 处理子标签、后代标签、兄弟标签和父标签
  8. 小学计算机集体听课评课,各科听课评课稿
  9. 小猪的收银系统。。改好了。分享
  10. 用身高和/或体重数据进行性别分类