python爬虫实现获取招聘信息

使用的python版本: 3.12.1

selenium版本:4.8.0

urllib版本:1.26.18

from selenium import webdriver 
from selenium.webdriver import ActionChains
import timeimport re
import xlwt
import urllib.parsedef get_html(url):chrome_driver = r"C:\chrome-win64\chromedriver.exe"options = webdriver.ChromeOptions()  # 用于配置Chrome浏览器驱动程序的行为options.add_argument("headless")  # 无界面启动options.add_experimental_option('useAutomationExtension', False)  # 禁用Chrome的自动化拓展程序options.add_experimental_option('excludeSwitches', ['enable-automation'])  # 确保浏览器不会因为启用自动化模式而出现不必要的错误或异常。options.add_argument("--disable-blink-features=AutomationControlled")  # 禁用由自动化测试或脚本控制的 Blink 功能。driver = webdriver.Chrome(chrome_options=options, executable_path=chrome_driver)# webdriver防屏蔽,不加这个就会出现滑动失败driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": """Object.defineProperty(navigator, 'webdriver', {get: () => false})"""})driver.get(url)time.sleep(1)# 找到需要滑动的滑块元素slider = driver.find_element("class name","nc_bg")# 创建操作链action_chains = ActionChains(driver)# 将鼠标移动到滑块上action_chains.move_to_element(slider)# 模拟按下鼠标左键并保持不松开action_chains.click_and_hold()# 移动鼠标使滑块达到目标位置action_chains.move_by_offset(300, 0)# 松开鼠标左键action_chains.release()# 执行操作链action_chains.perform()time.sleep(10)html = driver.page_source  # 获取网页源码driver.quit()  # 清除后再退出return htmldef get_msg(excel1, sheet1):number = 0job_type = input("请输入你想要搜索的职位:")for i in range(1, 3):  # 页数自己随便改try:print("正在爬取第" + str(i) + "页数据...")result = urllib.parse.quote(job_type)  # 编码url_start = 'https://we.51job.com/api/job/search-pc?api_key=51job&keyword=' + result# 删除&timestamp参数,修改&pageSize=500url_end = '&searchType=2&function=&industry=&jobArea=090200&jobArea2=&landmark=&metro=&salary=&workYear=&degree=&companyType=&companySize=&jobType=&issueDate=&sortType=0&pageNum=' \+ str(i) + '&requestId=&pageSize=200&source=1&accountId=&pageCode=sou%7Csou%7Csoulb'url = url_start + url_endmsg = get_html(url)  # 用seleinum写的方法处理需要滑动进入,相当于这一部分可以拿到数据了msg = msg.replace('\\', '')  # 将用于转义的"\"替换为空# `(.*?)`表示任意我们想要的内容# `.*?`表示任意其他字符串reg = re.compile(r'"jobName"\s*:\s*"([^"]*)".*?'r'"cityString"\s*:\s*"([^"]*)".*?'r'"provideSalaryString"\s*:\s*"([^"]*)".*?'r'"issueDateString"\s*:\s*"([^"]*)".*?'r'"workYearString"\s*:\s*"([^"]*)".*?'r'"degreeString"\s*:\s*"([^"]*)".*?'r'"companyName"\s*:\s*"([^"]*)".*?'r'"companyTypeString"\s*:\s*"([^"]*)".*?'r'"companySizeString"\s*:\s*"([^"]*)"',re.DOTALL)  # 表示可以用.代替任意字符(包括那些换行符)items = reg.findall(msg)  # 按照正则表达式规则查找for item in items:number = number + 1print(number, item[0], item[1], item[2], item[3], item[4], item[5], item[6], item[7], item[8])sheet1.write(number, 0, number)sheet1.write(number, 1, item[0])sheet1.write(number, 2, item[6])sheet1.write(number, 3, item[1])sheet1.write(number, 4, item[7])sheet1.write(number, 5, item[2])sheet1.write(number, 6, item[5])sheet1.write(number, 7, item[4])sheet1.write(number, 8, item[8])sheet1.write(number, 9, item[3])# 表格文件保存是可以选择两种情况,# 一种在for循环里面,每写一行保存一次,这样可以放在程序中途出现异常后,文件内容啥也没有# 另一种是在for循环之外,所有内容写完再保存excel1.save("51job.xlsx")time.sleep(0.5)  # 休息间隔except Exception as e:print("except:"+str(e))passdef creat_xls(excel1):# 设置单元格格式sheet1 = excel1.add_sheet('Job', cell_overwrite_ok=True)sheet1.write(0, 0, '序号')sheet1.write(0, 1, '职位')sheet1.write(0, 2, '公司名称')sheet1.write(0, 3, '公司地点')sheet1.write(0, 4, '公司性质')sheet1.write(0, 5, '薪资')sheet1.write(0, 6, '学历要求')sheet1.write(0, 7, '工作经验')sheet1.write(0, 8, '公司规模')sheet1.write(0, 9, '发布时间')return sheet1def main():# 新建表格空间excel1 = xlwt.Workbook()  # 创建工作簿sheet1 = creat_xls(excel1)  # 创建工作表get_msg(excel1, sheet1)  # 使用函数if __name__ == '__main__':main()

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

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

相关文章

系列十三、查询数据库中某个库、表、索引等所占空间的大小

一、information_schema数据库 1.1、概述 information_schema数据库是MySQL出厂默认带的一个数据库,不管我们是在Linux中安装MySQL还是在Windows中安装MySQL,安装好后都会有一个数据库information_schema,这个库中存放了其他库的所有信息。 …

【数据结构】队列

简单不先于复杂,而是在复杂之后。 文章目录 1. 队列1.1 队列的概念及结构1.2 队列的实现 2.栈和队列面试题3.概念选择题 1. 队列 1.1 队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表&#xff0c…

imgaug库指南(九):从入门到精通的【图像增强】之旅

引言 在深度学习和计算机视觉的世界里,数据是模型训练的基石,其质量与数量直接影响着模型的性能。然而,获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此,数据增强技术应运而生,成为了解决这一问题的…

K8S Prometheus-rocketmq-exporter配置

下载rocketmq-exporter 通过Docker仓库下载 docker pull sawyerlan/rocketmq-exporter:latest 然后打标签,推送到自己的仓库 也可通过代码自己build镜像 git clone GitHub - apache/rocketmq-exporter: Apache RocketMQ Prometheus Exporter 然后打标签&#x…

爬虫实战 - 微博评论数据可视化

简介: 我们都知道在数据比较少的情况下,我们是可以很轻易的获取到数据中的信息。但是当数据比较庞大的时候呢,我们就很难看出来了。尤其是面对现如今数以万计的数据,就更了。 不过好在我们可以通过计算机来帮我们进行分析&#…

2.4 DEVICE GLOBAL MEMORY AND DATA TRANSFER

在当前的CUDA系统中,设备通常是带有自己的动态随机存取存储器(DRAM)的硬件卡。例如,NVIDIA GTX1080具有高达8 GB的DRAM,称为全局内存。我们将互换使用全局内存和设备内存这两个术语。为了在设备上执行内核,…

西电期末1032.模式匹配

一.题目 二.分析与思路 遍历判断 三.代码实现 #include<bits/stdc.h>//万能头 int main() {int n;scanf("%d",&n);int num[n];for(int i0;i<n;i){scanf("%d",&num[i]);}int ans0;//个数for(int i0;i<n-2;i){if(num[i]3&&nu…

【Docker】数据卷容器

多个容器进行数据交换 这里引入一个数据卷容器的概念 以下介绍容器A与容器B进行数据交换的原理 假如容器A要与容器 B 进行数据交换&#xff0c; 首先创建一个容器C&#xff0c;将他挂载到数据卷&#xff0c;然后再将容器A与容器B挂载到容器C&#xff0c;这样做相当于容器A与…

【EAI 006】ChatGPT for Robotics:将 ChatGPT 应用于机器人任务的提示词工程研究

论文标题&#xff1a;ChatGPT for Robotics: Design Principles and Model Abilities 论文作者&#xff1a;Sai Vemprala, Rogerio Bonatti, Arthur Bucker, Ashish Kapoor 作者单位&#xff1a;Scaled Foundations, Microsoft Autonomous Systems and Robotics Research 论文原…

YOLOv5改进 | 注意力篇 | ACmix注意力与卷积混合的模型(轻量化注意力机制)

一、本文介绍 本文给大家带来的改进机制是ACmix自注意力机制的改进版本,它的核心思想是,传统卷积操作和自注意力模块的大部分计算都可以通过1x1的卷积来实现。ACmix首先使用1x1卷积对输入特征图进行投影,生成一组中间特征,然后根据不同的范式,即自注意力和卷积方式,分别…

使用 MONAI 加载和保存各种格式的医学图像

本教程属于实战&#xff0c;手把手教你加载各种医学图像数据&#xff08;nii.gz, .dcm, .png等&#xff09;。并学会查看医学图像数据的元数据&#xff08;shape, affine, orientation&#xff09;。学会使用monai全方位了解你的数据&#xff0c;并把它用于之后的深度学习训练。…

Leetcod面试经典150题刷题记录 —— 链表篇

Leetcod面试经典150题刷题记录-系列Leetcod面试经典150题刷题记录——数组 / 字符串篇Leetcod面试经典150题刷题记录 —— 双指针篇Leetcod面试经典150题刷题记录 —— 矩阵篇Leetcod面试经典150题刷题记录 —— 滑动窗口篇Leetcod面试经典150题刷题记录 —— 哈希表篇Leetcod面…

pytorch安装

pytoch安装 1. 准备工作1.1 需要提前安装的软件 2. 安装pyTorch我遇到的问题 3. 显卡测试4. CPU与GPU切换方法4.1 创建张量4.2 第一种切换方法4.3 第二种切换方法 1. 准备工作 1.1 需要提前安装的软件 Anaconda 史上最全最详细的Anaconda安装教程CUDA CUDA安装教程&#xff0…

让充电器秒供多个快充口,乐得瑞推出1拖2功率分配快充线方案

随着PD3.1协议的市场应用越来越多&#xff0c;一些充电器的Type-C接口的输出功率达到百瓦及以上&#xff0c;如何充分利用好这类充电器设备&#xff0c;乐得瑞电子推出1拖2快充线缆解决方案&#xff0c;支持智能功率分配策略支持私有快充协议。 如上图是乐得瑞1拖2功率分配快充…

WWDG---窗口看门狗

一.简介 窗口看门狗跟独立看门狗一样&#xff0c;也是一个递减计数器不断的往下递减计数&#xff0c;必须在一个窗口的上限值&#xff08;用户定义&#xff09;和下限值&#xff08;0X40&#xff0c;固定不能变&#xff09;之间喂狗不会复位&#xff0c;在上限值之前和下限值之…

Flink自定义Source模拟数据流

maven依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.…

OpenCV | 光流估计

光流估计 光流是空间运动物体在观测成像平面上的像素运动的“瞬时速度”&#xff0c;根据各个像素点的速度的速度矢量特征&#xff0c;可以对图像进行动态分析&#xff0c;例如目标跟踪 高度恒定&#xff1a;同一点随着时间的变化&#xff0c;其亮度不会发生改变。小运动&…

ProtoBuf一些踩坑记录

一、Protobuf学习基础 学习的资料很多也很全&#xff0c;这里添加几个链接进行Protobuf的基础学习的链接&#xff0c;链接中的案例使用C编辑&#xff1a; 链接&#xff1a;Protobuf介绍及简单使用(上&#xff09;_google_protobuf_version-CSDN博客 Protobuf介绍及简单使用(下&…

MFC综合实验二学习记录

文章目录 如何确定消息映射宏中命令对应的菜单项资源虚函数和纯虚函数的区别&#xff1f;MFC中什么是UPDATE_COMMAND_UI 消息如何查看控件对应的成员变量模态对话框的理解HGDIOBJ" 类型的值不能用于初始化 "CBrush *" 类型的实体错误MFC编程中CDC类型和HDC类型有…

TOP 9 安卓手机系统和应用程序修复工具,可修复各种Android 系统问题

您的新 Android 手机可能因其令人兴奋的性能而印象深刻。然而&#xff0c;随着时间的推移&#xff0c;您可能会发现系统有些地方与以前不太一样。您可能会遇到屏幕无响应、 Android应用程序崩溃、连接问题、电池耗尽等现象。 好吧&#xff0c;在这些情况下您不必感到不安&…