一、写在前面
这不一年过的差不多了,又临近过年了,对于明年要找工作的兄弟们,想好找什么工作了吗?
今天来试试爬一下某著名广告铺满了电梯的招聘网站,对岗位进行可视化数据分析,为明年做做准备。
二、准备工作
1、使用的软件
- python 3.8
- pycharm 2021专业版
- 谷歌浏览器 / 火狐浏览器 (千万不要下载错了, 搞了个什么双核浏览器)
驱动安装教程:谷歌浏览器驱动安装
驱动下载地址:驱动下载地址
驱动下载的版本要和你的浏览器版本信息最相近那个
2、使用的模块
- selenium
pip install selenium
(第三方模块, 是需要去安装, 指定模块版本进行安装) - csv
不会安装模块和安装慢看这篇:如何安装python模块, python模块安装失败的原因以及解决办法
三、大致流程
1、爬虫的基本流程
2、可视化分析展示
3、selenium模块的使用
4、保存csv
四、代码展示
1、爬虫部分
from selenium import webdriver # 导入模块
from selenium.webdriver.common.keys import Keys
import csv # 保存csv表格数据模块
import time # 时间模块
# mode='w' 写入(覆盖) a 追加写入(不会覆盖) wb 二进制写入 b 二进制模式 图片 视频 音频 特定格式文件
f = open('招聘数据全国_2.csv', mode='a', encoding='utf-8', newline='')
# 1. 全部选中内容
# 2. ctrl + R 勾选上 正则.*
# 3. 通过正则表达式匹配替换数据
csv_writer = csv.DictWriter(f, fieldnames=[
'标题',
'地区',
'薪资',
'经验',
'公司名',
'公司领域',
'福利',
'详情页',
])
csv_writer.writeheader() # 写表头
# selenium 爬取的速度相对而言会比较慢 >>> 模拟人的行为去操作浏览器
# 极大程度减少被反爬 其次 如果某网站有JS逆向加密 requests 爬取虽然快, 但是对于加密的网站
driver = webdriver.Chrome() # 实例化一个浏览器对象
# 程序员做东西, 其实不在乎过程, 只要结果 你只要能够实现一些东西就可以了 除非有特定需求
driver.get('https://www.zhipin.com/c100010000/?query=python&ka=sel-city-100010000')
# 输入我们想要搜索的职位名字
# 通过xpath语法或者css选择器语法
# 除了模拟点击之外, 还可以 操作键盘事件
# 给一个隐式等待 等10秒 等网页数据加载完就可以了
# time.sleep(10) 死等 一定要等够10秒钟
driver.implicitly_wait(10) # 为了等待网页把元素都加载出来 加载完毕就运行下面的代码
# driver.find_element_by_css_selector('.ipt-search').send_keys('python') # 通过css选择器找寻element元素面板里面数据内容
# driver.find_element_by_css_selector('.ipt-search').send_keys(Keys.ENTER) # 通过css选择器找寻element元素面板里面数据内容
# driver.find_element_by_css_selector('.btn.btn-search').click() # 通过css选择器找寻element元素面板里面数据内容
# driver.implicitly_wait(10)
# driver.find_element_by_css_selector('#filter-box > div > div.condition-box > dl > dd > a:nth-child(3)').click()
def get_job_info():
lis = driver.find_elements_by_css_selector('.job-list li') # elements 获取多个标签数据 element 获取一个
# print(lis) # for 遍历提取列表每一个元素
for li in lis:
title = li.find_element_by_css_selector('.job-name a').text # 标题
area = li.find_element_by_css_selector('.job-area').text # 城市
money = li.find_element_by_css_selector('.job-limit .red').text # 薪资
exp = li.find_element_by_css_selector('.job-limit p').text # 经验
company = li.find_element_by_css_selector('.company-text .name a').text # 经验
company_type = li.find_element_by_css_selector('.company-text p a').text # 经验
desc = li.find_element_by_css_selector('.info-desc').text # 经验
# https://www.zhipin.com/job_detail/edb7de1d2f9a442e1nJ_3dW9EFpQ.htm
href = li.find_element_by_css_selector('.job-name a').get_attribute('href') # 详情页url地址
# 用selenium 为了求稳 还不如直接多线程 框架
dit = {
'标题': title,
'地区': area,
'薪资': money,
'经验': exp,
'公司名': company,
'公司领域': company_type,
'福利': desc,
'详情页': href,
}
csv_writer.writerow(dit)
print(title, area, money, exp, company, company_type, desc, href)
for page in range(1, 101):
print(f'正在获取第{page}页的数据内容')
time.sleep(1)
get_job_info()
next_page = driver.find_element_by_css_selector('.next')
if next_page:
next_page.click()
else:
print('没有了')
driver.quit() # 退出浏览器
数据分析的代码有点长,私我吧。
对应视频教程:
用python把整个招聘网站都爬下来了,分析一下哪些公司福利比较好!