Python采集智联招聘网站数据实现可视化数据

嗨喽~大家好呀,这里是魔王呐 ❤ ~!

python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取

环境使用:

Python
Pycharm

模块使用:

selenium --> pip install selenium==3.141.0
time
csv

驱动下载地址: https://googlechromelabs.github.io/chrome-for-testing/#stable

小思路

今天案例使用: 谷歌浏览器

selenium 模拟人的行为操作浏览器:

自动打开浏览器, 获取网页上面数据内容多页数据采集: 需要登陆账号才能实现翻页

通过selenium实现免登陆操作:

使用selenium访问网址的时候, 网页状态是登陆的状态

智联招聘如果你想要通过requests获取数据:

需要学习JS逆向 --> 瑞数5js逆向比较复杂 --> 通过selenium去获取数据 但是效率很低

获取数据代码

“”“导入模块”“”

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 导入自动化测试模块
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# 导入csv模块
import csv
# 导入时间模块
import time

“”“创建文件对象”“”

options = Options()
options.add_argument("--user-data-dir=C:\\Users\\shanhe\\AppData\\Local\\Google\\Chrome\\User Data")
f = open('data.csv', mode='w', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['职位','公司','薪资','年薪','城市','区域','经验','学历','公司性质','公司规模','标签',
])
csv_writer.writeheader()

打开浏览器

driver = webdriver.Chrome(options=options)  # 实例化一个浏览器对象

访问目标网址

driver.get('https://sou.zhaopin.com/?jl=538&kw=python&p=1')

“”“页面下滑操作”“”

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def drop_down():"""执行页面滚动的操作"""  # javascriptfor x in range(1, 12, 2):  # 1 3 5 7 9  在你不断的下拉过程中, 页面高度也会变的time.sleep(1)j = x / 9  # 1/9  3/9  5/9  9/9# document.documentElement.scrollTop  指定滚动条的位置# document.documentElement.scrollHeight 获取浏览器页面的最大高度js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % jdriver.execute_script(js)
 """ 定位元素 <元素面板上面>driver.find_element_by_css_selector() 通过css选择定位元素driver.find_element_by_xpath() 通过xpath定位元素driver.find_element_by_id() 通过 ID 定位元素driver.find_element_by_class_name() 通过 class类 名定位元素- find_elements 表示提取多个- find_element 表示提取一个网页元素内容还没有加载完成, 就直接获取相关数据, 可能得不到内容     """
def get_content():# 延时等待 等元素内容加载完成driver.implicitly_wait(10)drop_down()# 获取整页20条 职位信息标签divs = driver.find_elements_by_css_selector('.joblist-box__item')# for循环遍历for div in divs:
    """提取具体数据- get_attribute 表示获取标签属性- text 表示获取标签文本"""
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''title = div.find_element_by_class_name('iteminfo__line1__jobname__name').get_attribute('title')name = div.find_element_by_class_name('iteminfo__line1__compname__name').get_attribute('title')salary = div.find_element_by_class_name('iteminfo__line2__jobdesc__salary').textsalary_info = salary.split(' · ')if len(salary_info) == 2:year_salary = salary_info[-1].replace('薪', '')money = salary_info[0]else:year_salary = '12'money = salary_info[0]info = [i.text for i in div.find_elements_by_class_name('iteminfo__line2__jobdesc__demand__item')]area_info = info[0].split('-')  # 城市信息# len(area_info) 统计元素个数 area_info==2 直接判断 area_info是否等于2if len(area_info) == 2:city = area_info[0]  # 城市area = area_info[1]  # 区域else:city = area_info[0]  # 城市area = '未知'exp = info[1]  # 经验edu = info[2]  # 学历tags = ','.join([j.text for j in div.find_elements_by_class_name('iteminfo__line3__welfare__item')])cop_info = [x.text for x in div.find_elements_by_class_name('iteminfo__line2__compdesc__item')]cop_type = cop_info[0]cop_num = cop_info[1]dit = {'职位': title,'公司': name,'薪资': money,'年薪': year_salary,'城市': city,'区域': area,'经验': exp,'学历': edu,'公司性质': cop_type,'公司规模': cop_num,'标签': tags,}# 写入数据csv_writer.writerow(dit)print(dit)for page in range(5):get_content()driver.find_element_by_css_selector('.soupager button:nth-child(7)').click()

可视化代码

import pandas as pd
from pyecharts.globals import CurrentConfig, NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB
df = pd.read_csv('data.csv')
df.head()

pyecharts官方文档链接: https://gallery.pyecharts.org/#/README

info = df['区域'].value_counts().index.to_list()
num = df['区域'].value_counts().to_list()
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 导入配置
from pyecharts import options as opts
# 导入饼图
from pyecharts.charts import Pie
# 随机生成数据
from pyecharts.faker import Faker
info = df['区域'].value_counts().index.to_list()
num = df['区域'].value_counts().to_list()
c = (Pie().add("",[list(z)for z in zip(info,num,)],center=["40%", "50%"],).set_global_opts(title_opts=opts.TitleOpts(title="上海python招聘区域分布情况"),legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))# 保存到html文件# .render("上海python招聘区域分布情况.html")
)
print(Faker.choose()) # ['草莓', '芒果', '葡萄', '雪梨', '西瓜', '柠檬', '车厘子']
print(Faker.values()) # [116, 118, 134, 44, 62, 53, 31]
# 展示在jupyter上面
c.load_javascript()
c.render_notebook()
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 导入配置
from pyecharts import options as opts
# 导入饼图
from pyecharts.charts import Pie
# 随机生成数据
from pyecharts.faker import Faker
info = df['学历'].value_counts().index.to_list()
num = df['学历'].value_counts().to_list()
c = (Pie().add("",[list(z)for z in zip(info,num,)],center=["40%", "50%"],).set_global_opts(title_opts=opts.TitleOpts(title="上海python招聘学历分布情况"),legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))# 保存到html文件# .render("上海python招聘区域分布情况.html")
)
c.render_notebook()
# 导入配置
from pyecharts import options as opts
# 导入饼图
from pyecharts.charts import Pie
# 随机生成数据
from pyecharts.faker import Faker
info = df['经验'].value_counts().index.to_list()
num = df['经验'].value_counts().to_list()
c = (Pie().add("",[list(z)for z in zip(info,num,)],center=["40%", "50%"],).set_global_opts(title_opts=opts.TitleOpts(title="上海python招聘经验分布情况"),legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))# 保存到html文件# .render("上海python招聘区域分布情况.html")
)
c.render_notebook()
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import pyecharts.options as opts
from pyecharts.charts import Line
from pyecharts.faker import Faker
info = df['经验'].value_counts().index.to_list()
num = df['经验'].value_counts().to_list()
c = (Line().add_xaxis(info).add_yaxis("", num, is_smooth=True).set_global_opts(title_opts=opts.TitleOpts(title="上海python招聘经验分布情况"))
)
c.render_notebook()

尾语

最后感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/190907.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Proteus仿真】【Arduino单片机】LM35温度计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用PCF8574、LCD1602液晶、LM35传感器等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示传感器检测温度。 二、软件设计 /* 作者&a…

微积分在神经网络中的本质

calculus 在一个神经网络中我们通常将每一层的输出结果表示为&#xff1a; a [ l ] a^{[l]} a[l] 为了方便记录&#xff0c;将神经网络第一层记为&#xff1a; [ 1 ] [1] [1] 对应的计算记录为为&#xff1a; a [ l ] &#xff1a; 第 l 层 a [ j ] &#xff1a; 第 j 个神经…

Jmeter 吞吐量Per User作用

第一点&#xff1a;Per User仅在Total Execution时生效 第二点&#xff1a;Per User 选中后 聚合报告中将统计的的样本数将变成线程组配置的线程数*吞吐量控制器配置的执行样本数量&#xff08;前提是线程组配置执行接口的次数线程数*循环数 大于吞吐量控制器配置的执行样本数…

场景交互与场景漫游-路径漫游(7)

路径漫游 按照指定的路径进行漫游对一个演示是非常重要的。在osgViewer中&#xff0c;当第一次按下小写字母“z”时&#xff0c;开始记录动画路径;待动画录制完毕&#xff0c;按下大写字母“Z”&#xff0c;保存动画路径文件;使用osgViewer读取该动画路径文件时&#xff0c;会回…

招聘小程序源码 人才招聘网源码

招聘小程序源码 人才招聘网源码 求职招聘小程序源码系统是一种基于微信小程序的招聘平台&#xff0c;它可以帮助企业和求职者快速、方便地进行招聘和求职操作。 该系统通常包括以下功能模块&#xff1a; 用户注册和登录&#xff1a;用户可以通过微信小程序注册和登录&#…

[C国演义] 第二十一章

第二十一章 最长公共子序列不相交的线 最长公共子序列 力扣链接 单个数组的子序列问题 – dp[i] -- 以nums[i] 为结尾的所有子序列中, xxx xxx. 然后状态转移方程根据 最后一个位置的归属问题进行讨论 两个数组的子序列问题 – 以小见大, 分别分析nums1中的一个区间 和 nums…

Python3语法总结-数据转换②

Python3语法总结-数据转换② Python3语法总结二.Python数据类型转换隐式类型转换显示类型转换 Python3语法总结 二.Python数据类型转换 有时候我们&#xff0c;需要对数据内置的类型进行转换&#xff0c;数据类型的转换。 Python 数据类型转换可以分为两种&#xff1a; 隐式类…

微信个人号api

简要描述&#xff1a; 登录E云平台 请求URL&#xff1a; http://域名地址/member/login域名地址开发者账号密码:后台系统自助开通 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/json 参数&#xff1a; 参数名必选类型说…

TensorFlow:GPU的使用

**引言** TensorFlow 是一个由 Google 开发的开源机器学习框架&#xff0c;它提供了丰富的工具和库&#xff0c;支持开发者构建和训练各种深度学习模型。而 GPU 作为一种高性能并行计算设备&#xff0c;能够显著提升训练深度学习模型的速度&#xff0c;从而加快模型迭代和优化…

【火炬之光-魔灵装备】

文章目录 装备天赋追忆石板技能魂烛刷图策略 装备 头部胸甲手套鞋子武器盾牌项链戒指腰带神格备注盾牌其余的装备要么是召唤物生命&#xff0c;要么是技能等级&#xff0c;鞋子的闪电技能等级加2不是核心&#xff0c;腰带的话主要是要冷却有冷却暗影的技能是不会断的&#xff…

YOLOv8改进 | DAttention (DAT)注意力机制实现极限涨点

论文地址&#xff1a; DAT论文地址 官方地址&#xff1a;官方代码的地址 代码地址&#xff1a;文末有修改了官方代码BUG的代码块复制粘贴即可 一、本文介绍 本文给大家带来的是YOLOv8改进DAT(Vision Transformer with Deformable Attention)的教程&#xff0c;其发布于2022…

“腾易视连”构建汽车生态新格局 星选计划赋能创作者价值提升

11月16日&#xff0c;在2023年广州国际车展前夕&#xff0c;以“腾易视连&#xff0c;入局视频号抓住增长新机会”为主题的腾易创作者大会在广州隆重举办。此次大会&#xff0c;邀请行业嘉宾、媒体伙伴、生态伙伴、视频号汽车领域原生达人等共济一堂&#xff0c;结合汽车行业数…