用Python轻松爬下智联招聘七千条招聘信息!
前言
利用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轻松爬下智联招聘七千条招聘信息!相关推荐
- 爬虫项目十七:用Python轻松爬下智联招聘七千条招聘信息
文章目录 前言 一.列表页URL获取 二.详情页URL获取 三.获取数据 总结 前言 利用Python requets+selenium 爬取智联招聘中全国招聘数据.如果看过我之前的文章那应该知道我们 ...
- python+selenium爬取智联招聘信息
python+selenium爬取智联招聘信息 需求 准备 代码 结果 需求 老板给了我一份公司名单(大概几百家如下图),让我到网上看看这些公司分别在招聘哪些岗位,通过分析他们的招聘需求大致能推断出我 ...
- Python爬虫爬取智联招聘(进阶版)
运行平台: Windows Python版本: Python3.6 IDE: Sublime Text 其他工具: Chrome浏览器 0.写在前面的话 本文是基于基础版上做的修改,如 ...
- Python | 爬虫爬取智联招聘(进阶版)
上一篇文章中<Python爬虫抓取智联招聘(基础版)>我们已经抓取了智联招聘一些信息,但是那些对于找工作来说还是不够的,今天我们继续深入的抓取智联招聘信息并分析,本文使用到的第三方库很多, ...
- Python爬虫爬取智联招聘!谁说Python岗位少的?
运行平台: Windows Python版本: Python3.6 IDE: Sublime Text 其他工具: Chrome浏览器 0.写在前面的话 本文是基于基础版上做的修改,如 ...
- Python爬虫爬取智联招聘职位信息
目的:输入要爬取的职位名称,五个意向城市,爬取智联招聘上的该信息,并打印进表格中 #coding:utf-8 import urllib2 import re import xlwtclass ZLZ ...
- 【Python爬虫案例学习20】Python爬虫爬取智联招聘职位信息
目的:输入要爬取的职位名称,五个意向城市,爬取智联招聘上的该信息,并打印进表格中 ####基本环境配置: Python版本:2.7 开发工具:pycharm 系统:win10 ####相关模块: im ...
- 使用python动手爬取智联招聘信息并简单分析
根据使用场景,网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种 通用网络爬虫,是捜索引擎抓取系统(Baidu.Google.Yahoo等)的重要组成部分.主要目的是将互联网上的网页下载到本地,形成一个互联 ...
- python scrapy爬取智联招聘的公司和职位信息(一)
这个帖子先暂时放弃.本以为和拉钩一样全是静态页面,结果在写item的时候,发现网页有点意思,突然有个大胆的想法,想试试-先埋坑,后面在填坑 缘由: 最近在找工作发现智联和51上太多培训机构的虚假招聘信 ...
最新文章
- poj1226 Substrings
- Java中各种集合特点总结
- CentOS 搭建svn服务器
- Gridview分页模板
- IntelliJ IDEA中文乱码问题
- linux 7查内核,查看CentOS7内核版本及发行版本
- MySql 你知道事务隔离是怎么回事吗?
- 《HBase权威指南》读书笔记4
- 汉字编码原则及0XA1与0X80代表的含义。(汉字编码原则为转发)
- Navicat连接本地数据库10038,1251
- 只需要10秒,使用PPT给证件照换底色
- 如何使用navicat premium打开外部.sql文件
- 《HelloGitHub》第 61 期
- 广发信用卡联名南航,申卡这样操作
- 轻断食过程中的身体变化
- 剑指offe 和为S的连续正数序列
- 短视频、移动AI……你关注的热点移动开发技术都在这
- 嵌入式工作会越来越少吗?
- linux磁盘阵列教程,RAID 磁盘阵列简述
- iOS Charles捉取正式环境上的数据
热门文章
- bzoj3638【GDOI2016模拟3.20】diyiti
- 二阶系统的带宽(频域分析)
- 传统数据仓库 DW/EDW/BI/ODS/DM/ETL
- Pandas经典用法:数据筛选之iloc和loc
- Css 实现边界 凹陷 状态
- 上海英方科技招股书市场分析
- element中table组件根据属性合并行数据
- js 设置video宽度_video设置视频的宽高
- android动态壁纸2.2.1,8.2.1启动动态壁纸的方法
- 什么牌子的蓝牙耳机音质最好?音质不错的蓝牙耳机推荐