Python Selenium获取boss直聘招聘信息

简介: Python Selenium获取boss直聘招聘信息

hello 大家好~

又是元气满满的一天呢~

既然元气满满,要不要搞点事情,譬如说,“Boss直聘”的招聘数据~

说走咱就走,说干咱就干~

目标确定

我们本次使用的是Selenium来抓取数据。

获取的信息有标题、薪资、公司名称、公司信息、经验要求、公司标签和公司福利等信息

网页分析

因为我们使用的是selenium来获取数据所以我们要做的事就是使用电脑来模拟人的手动操作,无需对网页过多分析。准备好工具即可

1. selenium 安装

selenium可以直接可以用pip安装。

pip install selenium

2. chromedriver安装

要注意的是chromedriver的版本一定要与Chrome的版本一致,不然就不起作用。

有两个下载地址分别如下:

1、http://chromedriver.storage.googleapis.com/index.html

2、https://npm.taobao.org/mirrors/chromedriver/

当然,你首先需要查看你的Chrome版本,在浏览器中输入

chrome://version 即可查看浏览器版本信息

准备就绪接下来进入实战

导入所需模块

# 导入模块
import csv
import random
import time
from icecream import ic
from selenium import webdriver

打开浏览器并且加载网页内容

# 实例化浏览器对象
driver = webdriver.Chrome()
 
# 打开网址
driver.get('https://www.zhipin.com/c100010000/?query=python&ka=sel-city-100010000')
 
# 等待网页加载完成
driver.implicitly_wait(10)

获取网页信息

由图看以看出,所有招聘信息都存在于li标签之中

所以接下来我们的思路就很清晰,先获取到所有的li标签

再去提取内部我们所需要的信息

 # 获取数据内容
    lis = driver.find_elements_by_css_selector('.job-list ul li')  # 获取多个li标签加s
    print(lis) # 返回列表
  
  '''
  [<selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="ab491619-fa11-48b6-9095-5c2720c213e1")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="d6e68702-ecad-43a9-a173-35e7088467b2")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="1e4e384e-e2b7-4af7-96c8-d44d9de9bfd0")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="04ae01a9-3c8b-4733-8db4-467ba502fdea")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="82f6772d-e962-46d5-b157-a9c11943ee42")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="1efaaa79-f423-4b38-bd67-03f168a1df4e")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="a73d425f-e6ef-4946-b6a7-fb345821e326")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="6da89e07-6d90-42a9-a61a-7871ceff58c5")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="e9432c2b-fedb-426d-aaa9-e2b29934e45e")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="b4f45c95-2582-4630-94ef-fdaa030e071e")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="86af349f-dc5b-4ca9-b1c4-7415d4583aae")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="6ba75e95-4c7d-438c-9305-f8df85cd2493")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="46365c27-948b-4436-972f-5dd519343f24")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="a595a576-36ea-4db4-9012-750c2eb0deb2")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="5bbc641f-bb49-4c62-b3b1-d7b75d434b61")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="f0453a49-7335-4a07-a00b-a662dd02efff")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="60080578-b1ba-4337-b4c1-dff4e4b237be")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="449582de-06f3-4a15-892e-a4ee3ab6407a")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="4478b6b6-f326-479c-b122-50fb6f1c56de")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="66df9ed4-d05c-4648-a3bc-4eedccbbd6a1")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="7bac7afd-10f5-440f-a408-8e7b106e5c76")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="9b956f40-f26c-49d9-aef0-4a11cd8b5548")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="543ad28f-e6c9-4cdf-a204-5d62306d6194")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="47d1ddf6-848b-4513-af5c-d8cff76e90db")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="19139ca9-f8c0-4ffe-a3f7-61256205890f")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="05668298-5ea3-4792-994b-c4e699873c9f")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="1291c4d9-0650-4c07-a2e2-f43f9d1557b4")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="3bf0414a-2da8-4ea0-9494-c468945f7eb5")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="b7b344aa-1189-4291-8133-e1a64b958351")>, <selenium.webdriver.remote.webelement.WebElement (session="02c17ca6c1ce3a7b8feb729e0ecfcd44", element="b5908150-2f4e-4f86-ae41-5da0de93a9e2")>]
  '''

我们成功获取到了所有的li对象,接下来我们循环遍历出我们所需要的信息

    for li in lis:
        title = li.find_element_by_css_selector('.job-area-wrapper span').text
        salary = li.find_element_by_css_selector('.job-limit.clearfix span').text
        cop_name = li.find_element_by_css_selector('.name a').text
        cop_info = li.find_element_by_css_selector('.company-text p').text
 
        exprence = li.find_element_by_css_selector('.job-limit.clearfix p').text
        tags = li.find_element_by_css_selector('.tags span').text
        welfare = li.find_element_by_css_selector('.info-desc').text
        ic(title, salary, cop_name, cop_info, exprence, tags, welfare)
  
  '''
 ic| title: '深圳·南山区·蛇口'
    salary: '12-15K'
    cop_name: '芥子大数'
    cop_info: '计算机软件100-499人'
    exprence: '1-3年本科'
    tags: 'Linux'
    welfare: '五险一金,定期体检,餐补,员工旅游,加班补助,通讯补贴,零食下午茶,节日福利,年终奖,带薪年假,补充医疗保险,股票期权,免费班车,交通补助'
ic| title: '济南·市中区·万达广场'
    salary: '8-12K'
    cop_name: '山东思域'
    cop_info: '计算机软件100-499人'
    exprence: '3-5年本科'
    tags: '容器技术'
    welfare: '加班补助,定期体检,五险一金,交通补助,带薪年假,零食下午茶,员工旅游,节日福利,年终奖'
ic| title: '青岛'
    salary: '9-11K'
    cop_name: '森科特'
    cop_info: '船舶/航空/航天B轮20-99人'
    exprence: '1-3年硕士'
    tags: 'Python'
    welfare: '补充医疗保险,带薪年假,餐补,包住!单人间,股票期权,通讯补贴,定期体检,员工旅游,五险一金,节日福利,包吃,年终奖,零食下午茶,免费班车,加班补助,住房补贴,交通补助'
  '''

数据保存

接下来我们将数据保存在csv中便于后续可视化展示

f = open('招聘1.xlsx', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
    '标题',
    '薪资',
    '公司名称',
    '公司信息',
    '经验要求',
    '标签',
    '福利',
])
 
dit = {
            '标题': title,
            '薪资': salary,
            '公司名称': cop_name,
            '公司信息': cop_info,
            '经验要求': exprence,
            '标签': tags,
            '福利': welfare,
        }
        csv_writer.writerow(dit)

多页获取

我们找到下一页所在的标签,然后循环获取100页数据

for page in range(1, 100+1):
    print(f'-----------------正在抓取第{page}页数据-----------------')
    time.sleep(random.random()*3) # 延时防止被反爬
    # 点击翻页
    next_page = driver.find_element_by_css_selector('.next')
    if next_page:
        next_page.click()
    else:
        print('没有数据了~~')

数据可视化

职位招聘排行榜

职位经验要求

薪资分布排行榜

相关文章
|
2月前
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
147 5
|
1月前
|
数据采集 Web App开发 前端开发
Python爬虫进阶:Selenium在动态网页抓取中的实战
【10月更文挑战第26天】动态网页抓取是网络爬虫的难点,因为数据通常通过JavaScript异步加载。Selenium通过模拟浏览器行为,可以加载和执行JavaScript,从而获取动态网页的完整内容。本文通过实战案例,介绍如何使用Selenium在Python中抓取动态网页。首先安装Selenium库和浏览器驱动,然后通过示例代码展示如何抓取英国国家美术馆的图片信息。
112 6
|
2月前
|
数据采集 Web App开发 数据可视化
Python爬虫教程:Selenium可视化爬虫的快速入门
Python爬虫教程:Selenium可视化爬虫的快速入门
|
2月前
|
测试技术 数据安全/隐私保护 开发者
自动化测试的奥秘:如何用Selenium和Python提升软件质量
【9月更文挑战第35天】在软件开发的海洋中,自动化测试是那艘能引领我们穿越波涛的帆船。本文将揭开自动化测试的神秘面纱,以Selenium和Python为工具,展示如何构建一个简单而强大的自动化测试框架。我们将从基础出发,逐步深入到高级应用,让读者能够理解并实现自动化测试脚本,从而提升软件的质量与可靠性。
|
3月前
|
Web App开发 测试技术 持续交付
自动化测试的利器:Selenium与Python的完美结合
【9月更文挑战第21天】在软件开发的世界里,测试是确保产品质量的关键步骤。随着敏捷开发和持续集成的流行,自动化测试工具变得尤为重要。本文将介绍如何使用Selenium和Python进行高效的自动化测试,不仅提供代码示例,还深入探讨如何设计测试用例、选择正确的测试框架、以及如何整合到CI/CD流程中。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用的技巧。
59 3
|
3月前
|
敏捷开发 测试技术 持续交付
自动化测试之美:如何用Selenium和Python打造高效测试脚本
【9月更文挑战第13天】在软件开发的海洋中,自动化测试是那抹不可或缺的亮色。它不仅提升了测试效率,还保障了产品质量。本文将带你领略使用Selenium和Python构建自动化测试脚本的魅力所在,从环境的搭建到脚本的编写,再到问题的排查,每一步都是对软件质量把控的深刻理解和实践。让我们开始这段探索之旅,解锁自动化测试的秘密吧!
84 0
|
4月前
|
Web App开发 测试技术 持续交付
探索自动化测试:以Selenium和Python为例
【8月更文挑战第31天】自动化测试在现代软件开发中扮演着不可或缺的角色。本文将通过一个简化的示例,展示如何使用Selenium和Python进行Web应用的自动化测试。我们将从安装必要的工具开始,逐步构建一个简单的测试脚本,并执行它来验证其功能。通过这个过程,我们旨在揭示自动化测试的价值,并激励读者深入探索这一领域。
|
4月前
|
Web App开发 安全 测试技术
自动化测试中的Python魔法:使用Selenium和pytest框架
【8月更文挑战第31天】 在软件开发的海洋中,自动化测试是确保航行安全的灯塔。本文将带你探索如何利用Python语言结合Selenium和pytest框架,搭建一套高效的自动化测试体系。我们将从基础设置讲起,逐步深入到编写测试用例,最后通过一个实战案例来展示如何在实际项目中运用这些工具。文章旨在为读者提供一套清晰的自动化测试解决方案,让你的开发之旅更加顺畅。
|
4月前
|
Web App开发 测试技术 API
探索自动化测试的奥秘:以Selenium和Python为例
【8月更文挑战第31天】在软件开发的海洋中,自动化测试是一艘能够带领我们驶向高效、准确代码实现的航船。本文将揭开自动化测试的神秘面纱,通过Selenium和Python这两个工具的结合使用,展示如何构建一个简单而强大的自动化测试脚本。从环境配置到脚本编写,再到实际运行,我们将一步步深入自动化测试的世界,解锁软件质量保障的新技能。
|
4月前
|
前端开发 IDE 测试技术
自动化测试中的代码魔法:使用Python和Selenium框架
【8月更文挑战第31天】在软件开发的海洋中,自动化测试是一艘能够带领团队穿越波涛的帆船。本文将引导读者了解如何利用Python语言结合Selenium框架,编写简洁而强大的自动化测试脚本。我们将从搭建开发环境开始,逐步深入到实际案例,最后通过一个简单示例展示如何实现端到端的自动化测试流程。文章不仅提供实用的代码片段,还旨在激发读者对于软件测试深层次思考的热情。