前言

利用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的方式极大的缩短了时间

近期有很多朋友通过私信咨询有关Python学习问题。为便于交流,点击蓝色自己加入讨论解答资源基地

用Python轻松爬下智联招聘七千条招聘信息!相关推荐

  1. 爬虫项目十七:用Python轻松爬下智联招聘七千条招聘信息

    文章目录 前言 一.列表页URL获取 二.详情页URL获取 三.获取数据 总结 前言 利用Python requets+selenium 爬取智联招聘中全国招聘数据.如果看过我之前的文章那应该知道我们 ...

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

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

  3. Python爬虫爬取智联招聘(进阶版)

    运行平台: Windows   Python版本: Python3.6   IDE: Sublime Text    其他工具:  Chrome浏览器 0.写在前面的话 本文是基于基础版上做的修改,如 ...

  4. Python | 爬虫爬取智联招聘(进阶版)

    上一篇文章中<Python爬虫抓取智联招聘(基础版)>我们已经抓取了智联招聘一些信息,但是那些对于找工作来说还是不够的,今天我们继续深入的抓取智联招聘信息并分析,本文使用到的第三方库很多, ...

  5. Python爬虫爬取智联招聘!谁说Python岗位少的?

    运行平台: Windows   Python版本: Python3.6   IDE: Sublime Text    其他工具:  Chrome浏览器 0.写在前面的话 本文是基于基础版上做的修改,如 ...

  6. Python爬虫爬取智联招聘职位信息

    目的:输入要爬取的职位名称,五个意向城市,爬取智联招聘上的该信息,并打印进表格中 #coding:utf-8 import urllib2 import re import xlwtclass ZLZ ...

  7. 【Python爬虫案例学习20】Python爬虫爬取智联招聘职位信息

    目的:输入要爬取的职位名称,五个意向城市,爬取智联招聘上的该信息,并打印进表格中 ####基本环境配置: Python版本:2.7 开发工具:pycharm 系统:win10 ####相关模块: im ...

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

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

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

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

最新文章

  1. poj1226 Substrings
  2. Java中各种集合特点总结
  3. CentOS 搭建svn服务器
  4. Gridview分页模板
  5. IntelliJ IDEA中文乱码问题
  6. linux 7查内核,查看CentOS7内核版本及发行版本
  7. MySql 你知道事务隔离是怎么回事吗?
  8. 《HBase权威指南》读书笔记4
  9. 汉字编码原则及0XA1与0X80代表的含义。(汉字编码原则为转发)
  10. Navicat连接本地数据库10038,1251
  11. 只需要10秒,使用PPT给证件照换底色
  12. 如何使用navicat premium打开外部.sql文件
  13. 《HelloGitHub》第 61 期
  14. 广发信用卡联名南航,申卡这样操作
  15. 轻断食过程中的身体变化
  16. 剑指offe 和为S的连续正数序列
  17. 短视频、移动AI……你关注的热点移动开发技术都在这
  18. 嵌入式工作会越来越少吗?
  19. linux磁盘阵列教程,RAID 磁盘阵列简述
  20. iOS Charles捉取正式环境上的数据

热门文章

  1. bzoj3638【GDOI2016模拟3.20】diyiti
  2. 二阶系统的带宽(频域分析)
  3. 传统数据仓库 DW/EDW/BI/ODS/DM/ETL
  4. Pandas经典用法:数据筛选之iloc和loc
  5. Css 实现边界 凹陷 状态
  6. 上海英方科技招股书市场分析
  7. element中table组件根据属性合并行数据
  8. js 设置video宽度_video设置视频的宽高
  9. android动态壁纸2.2.1,8.2.1启动动态壁纸的方法
  10. 什么牌子的蓝牙耳机音质最好?音质不错的蓝牙耳机推荐