爬虫之牛刀小试(六):爬取BOSS网站招聘的内容

今天决定再次尝试一下
selenium
BOSS网站
在这里插入图片描述
想要找到我们感兴趣的职位,随便举个例子吧,比如家教啥的

搜一下
在这里插入图片描述
找到我们感兴趣的内容
在这里插入图片描述
接着尝试用selenium模拟登录,如下所示:
在这里插入图片描述
接着找到对应的位置让selenium自己干就行了。

最后的代码如下:

from selenium.webdriver.common.keys import Keys
import re
from selenium import webdriver
from mitmproxy import proxy, options
from mitmproxy.tools.dump import DumpMaster
from selenium.common.exceptions import NoSuchElementException
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import json
import csv

def data_change_dict(text):
    data = {"职位名称": "", "地点": "", "学历": "", "届别": "", "薪资": "", "招聘者": "", "公司名称": "", "公司类型": "", "公司规模": "", "福利": ""}
    # 按换行符分割文本
    parts = text.split('\n')
    if len(parts) < 10:
        parts.insert(9, "")
    # 将分割后的部分分别赋值给字典的键
    data["职位名称"] = parts[0]
    data["地点"] = parts[1]
    data["薪资"] = parts[2]
    data["届别"] = parts[3]
    data["学历"] = parts[4]
    data["招聘者"] = parts[5]
    data["公司名称"] = parts[6]
    data["公司类型"] = parts[8]
    data["公司规模"] = parts[7]
    data["福利"] = parts[9]
    return data
    
def get_url(driver):
    # 找到输入框
    input_element = driver.find_element(By.XPATH, '//*[@id="wrap"]/div[3]/div/div[1]/div[1]/form/div[2]/p/input')
    # 在输入框中输入 "家教" 并按下回车键
    input_element.send_keys("家教", Keys.RETURN)
    time.sleep(8)
    k=2
    o=10
    datas = []
    print("正在爬取第1页")
    s=['//*[@id="wrap"]/div[2]/div[2]/div/div[1]/div[2]/div/div/div/a[3]',
    '//*[@id="wrap"]/div[2]/div[2]/div/div[1]/div[1]/div/div/div/a[4]',
    '//*[@id="wrap"]/div[2]/div[2]/div/div[1]/div[1]/div/div/div/a[5]',
    '//*[@id="wrap"]/div[2]/div[2]/div/div[1]/div[1]/div/div/div/a[6]',
    '//*[@id="wrap"]/div[2]/div[2]/div/div[1]/div[1]/div/div/div/a[7]',
    '//*[@id="wrap"]/div[2]/div[2]/div/div[1]/div[1]/div/div/div/a[7]',
    '//*[@id="wrap"]/div[2]/div[2]/div/div[1]/div[1]/div/div/div/a[7]',
    '//*[@id="wrap"]/div[2]/div[2]/div/div[1]/div[1]/div/div/div/a[8]',
    '//*[@id="wrap"]/div[2]/div[2]/div/div[1]/div[1]/div/div/div/a[9]']
    for j in range(1,10):
        if j>1:
            k=1
        for i in range(1,31):
            element = driver.find_element(By.XPATH, '//*[@id="wrap"]/div[2]/div[2]/div/div[1]/div['+str(k)+']/ul/li['+str(i)+']')
            time.sleep(1)
            data_dict=data_change_dict(element.text)
            datas.append(data_dict)
        button = driver.find_element(By.XPATH, s[j-1])
        # 点击按钮
        button.click()
        # 等待 8秒
        time.sleep(8)
        print('爬取第'+str(j)+'页成功')
        print("正在爬取第"+str(j+1)+"页")
    print('爬取第'+str(10)+'页成功')
    save_data(datas)

def save_data(datas):
    # 将数据写入到文件中
    with open('boss.csv', 'w', encoding='utf-8') as f:
        # 创建一个 DictWriter 对象
        writer = csv.DictWriter(f, fieldnames=datas[0].keys())
        # 写入表头
        writer.writeheader()
        # 写入数据
        writer.writerows(datas)

    
def delu():
    boss_url = 'https://www.zhipin.com/xiamen/'
    option = webdriver.ChromeOptions()
    option.add_argument('--ignore-certificate-errors')
    # 使用 selenium.webdriver 创建 driver 对象
    driver = webdriver.Chrome(options=option)  
    driver.get(boss_url)
    time.sleep(2)
    button1 = driver.find_element(By.XPATH, '/html/body')
    button1.click()
    time.sleep(2)
    window_handles = driver.window_handles

    # 切换到新打开的窗口
    driver.switch_to.window(window_handles[-1])
    button2 = driver.find_element(By.XPATH, '//*[@id="wrap"]/div[1]/header/div/div[2]/div')
    button2.click()
    time.sleep(5)
    # 关闭新打开的窗口
    driver.close()
    # 切换回原来的窗口
    driver.switch_to.window(window_handles[0])
    driver.get(driver.current_url)
    time.sleep(12)
    print("登陆成功")
    return driver
    

if __name__ == '__main__':
    driver = delu()
    get_url(driver)

        
        

运行效果:
在这里插入图片描述
结果:
在这里插入图片描述
最近新开了公众号,请大家关注一下。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SSM基础入门

SSM Mybatis、Spring和SpringMVC这三个框架整合在一起完成业务功能开发 文章目录 SSM5.1 流程5.2 详细步骤5.2.1 基本配置5.2.2 功能模块开发5.2.3 测试5.2.3.1 单元测试5.2.3.2 PostMan测试 5.3 统一结果封装5.3.1 概念5.3.2 实现 5.4 统一异常处理5.4.1 异常处理器的使用5.4…

统计学-R语言-4.5

文章目录 前言多变量数据多维列联表复式条形图并列箱线图R语言中取整运算主要包括以下五种&#xff1a; 点带图多变量散点图重叠散点图矩阵式散点图 练习 前言 本篇文章将继续对数据的类型做介绍&#xff0c;本片也是最后一个介绍数据的。 多变量数据 掌握描述多变量数据的分…

openssl3.2 - 官方demo学习 - server-arg.c

文章目录 openssl3.2 - 官方demo学习 - server-arg.c概述笔记备注END openssl3.2 - 官方demo学习 - server-arg.c 概述 TLS服务器, 等客户端来连接; 如果客户端断开了, 通过释放bio来释放客户端socket, 然后继续通过bio读来aceept. 笔记 对于开源工程, 不可能有作者那么熟悉…

vue前端开发自学demo,父子组件之间传递数据demo2

vue前端开发自学demo,父子组件之间传递数据demo2!实际上&#xff0c;组件之间传递数据的&#xff0c;数据类型&#xff0c;是可以多种多样的&#xff0c;下面为大家展示几个常见的数据类型&#xff0c;比如数字类型&#xff0c;数组类型&#xff0c;对象类型。 代码如下所示&a…

sublime中添加GBK编码模式

当写代码的中文注释时&#xff0c;编译代码出现如下错误&#xff1a; 解决办法&#xff0c;添加GBK模式&#xff1a; &#xff11;. 点击Preferences -> Package Control&#xff1a; 2. 在跳出来的搜索框里搜索conver, 点击ConverToUTF8 3. File左上角会多出GBK的选项 由…

PiflowX-DorisRead组件

DorisRead组件 组件说明 从Doris存储读取数据。 计算引擎 flink 有界性 目前Doris Source是有界流&#xff0c;不支持CDC方式读取。 组件分组 Doris 端口 Inport&#xff1a;默认端口 outport&#xff1a;默认端口 组件属性 名称展示名称默认值允许值是否必填描述…

【遇见Transformer】Transformer代码、原理全方位解析,相信我,看这一篇就够了!

目录 前言 预备知识 本章代码环境 关注我&#xff0c;不迷路 &#xff01; Transformer模型的结构​编辑 Transformer模型的基本原理 注意力机制 自注意力机制 两者的区别 多头注意力机制 Transformer模型的训练 Transformer模型的应用 论文地址 前言 预备知识 在…

学习python仅此一篇就够了(文件操作:读,写,追加)

python文件操作 文件编码 编码技术即&#xff1a;翻译的规则&#xff0c;记录了如何将内容翻译成二进制&#xff0c;以及如何将二进制翻译回可识别内容。 计算机中有许多可用编码&#xff1a; UTF-8 GBK BUG5 文件的读取操作 open&#xff08;&#xff09;函数 在pyth…

数据库锁表原因、排查、解决

一.场景 场景1场景2二.原因三.排查四.解决方案 一.场景 场景1 锁表通常发生在DML&#xff08; insert 、update 、delete &#xff09; A操作进行全量数据同步&#xff0c;对整个表的粒度进行上锁&#xff0c;导致B操作只能等待A操作完成才能进入插入数据。此时就出现了锁表…

【分布式技术】监控平台zabbix介绍与部署

目录 一、为什么要做监控&#xff1f; 二、zabbix是什么&#xff1f; 三、zabbix有哪些组件&#xff1f; ​编辑Zabbix 6.0 功能组件&#xff1a; ●Zabbix Server ●数据库 ●Web 界面 ●Zabbix Agent ●Zabbix Proxy ●Java Gateway 四、zabbix的工作原理&#xf…

test Property-based Testing-04-junit-quickcheck

拓展阅读 开源 Auto generate mock data for java test.(便于 Java 测试自动生成对象信息) 开源 Junit performance rely on junit5 and jdk8.(java 性能测试框架。性能测试。压测。测试报告生成。) junit-quickcheck&#xff1a;基于 JUnit 风格的属性驱动测试库 junit-qu…

对C语言的理解

1.计算机语言 就是我们人类与计算机进行交流的媒介。我们可以使用编程语言对计算机下达命令&#xff0c;从而让计算机完成我们所需要的功能。 语言 语法 逻辑 计算机语言有很多种。如&#xff1a;C 、C、Java、Go、JavaScript、Python&#xff0c;Scala等。 2.计算机语言简史…

Java基础之并发篇(二)

1、前言 本篇主要基于Java基础之并发篇&#xff08;一&#xff09;继续梳理java中关于并发相关的基础只是。本篇基于网络整理&#xff0c;和自己编辑。在不断的完善补充哦。 2、synchronized 的原理是什么? synchronized是 Java 内置的关键字&#xff0c;它提供了一种独占的…

Linux CentOS 7.6安装JDK详细保姆级教程

一、检查系统是否自带jdk java --version 如果有的话&#xff0c;找到对应的文件删除 第一步&#xff1a;先查看Linux自带的JDK有几个&#xff0c;用命令&#xff1a; rpm -qa | grep -i java第二步:删除JDK&#xff0c;执行命令&#xff1a; rpm -qa | grep -i java | xarg…

【AI的未来 - AI Agent系列】【MetaGPT】2. 实现自己的第一个Agent

在MetaGPT中定义的一个agent运行示例如下&#xff1a; 一个agent在启动后他会观察自己能获取到的信息&#xff0c;加入自己的记忆中下一步进行思考&#xff0c;决定下一步的行动&#xff0c;也就是从Action1&#xff0c;Action2&#xff0c;Action3中选择执行的Action决定行动…

时间序列数据的季节性检测

时间序列分析是统计学和数据科学的一个基本研究领域&#xff0c;它为理解和预测序列数据中的模式提供了一个强大的框架。特别是时间序列数据&#xff0c;它捕获连续时间间隔内的信息&#xff0c;使分析师能够揭示趋势&#xff0c;季节性模式和其他时间依赖性。在时间序列分析的…

Django教程第6章 | web开发实战-文件上传(导入文件、上传图片)

专栏系列&#xff1a;Django学习教程 导入文件 目标&#xff1a;导入部门清单excel&#xff0c;解析excel数据存储到数据库。 1.准备要导入的excel文件 2.编写模板HTML <div class"panel panel-default"><!-- Default panel contents --><div class…

第 7 章 排序算法

文章目录 7.1 排序算法的介绍7.3 算法的时间复杂度7.3.1 度量一个程序(算法)执行时间的两种方法7.3.2 时间频度7.3.3 时间复杂度7.3.4 常见的时间复杂度7.3.5 平均时间复杂度和最坏时间复杂度 7.4 算法的空间复杂度简介7.4.1 基本介绍 7.5 冒泡排序7.5.1 基本介绍7.5.2 演示冒泡…

Python——VScode安装

⼀、下载安装 [root192 ~]# rpm --import https://packages.microsoft.com/keys/microsoft.asc[root192 ~]# sh -c echo -e "[code]\nnameVisualStudio Code\nbaseurlhttps://packages.microsoft.com/yumrepos/vscode\nenabled1\ngpgcheck1\ngpgkeyhttps://packages.mi…

企业级大数据安全架构(三)修改集群节点hostname

作者&#xff1a;楼高 在后续安装FreeIPA的过程中&#xff0c;要求机器名必须包含完整的域名信息。如果之前在Ambari集群节点上的机器名不符合这个要求&#xff0c;可以按照以下步骤在Ambari上修改所有节点的机器名&#xff1a; 1.部署节点说明 本次测试是三台 ambari 节点&…