IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> selenium应用之拉勾简历邀约数据抓取与分析 -> 正文阅读

[开发测试]selenium应用之拉勾简历邀约数据抓取与分析

需求故事:
又是一年一度的金三银四招聘季,拉勾上的简历邀请投递信息实在是看不过来了;于是决定利用强大的Python分析一下这些数据。
注:纯手打,如有错误欢迎评论区交流!
转载请注明出处:https://blog.csdn.net/testleaf/article/details/123311157
多谢!!!

在这里插入图片描述

在这里插入图片描述

一、导入需要使用的库

import time
from selenium import webdriver
import openpyxl
import wordcloud

说明:
1、time.sleep(x):可以控制程序休眠的时间(秒);
2、time.strftime("%Y-%m-%d %H-%M-%S", time.localtime()):可以获取到当前的日期和时间数据;
3、selenium:控制浏览器的一些自动操作;
4、openpyxl:控制excel的读取和写入;
5、wordcloud:根据字符串生成词云图片;

二、打开拉勾简历邀约界面

1、启动Chrome浏览器,最大化浏览器,并打开拉勾网站

driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.lagou.com/')

在这里插入图片描述
2、切换城市为广州,并点击登录按钮

driver.find_element_by_xpath('//a[@data-city="广州"]').click()
driver.find_element_by_xpath('//a[@class="login"]').click()

在这里插入图片描述
3、切换登录方式为密码登录,输入常用手机号/邮箱、密码,勾选同意用户协议及隐私政策,点击登录:

driver.find_element_by_xpath('//div[@class="change-login-type" and @data-lg-tj-no="0006"]').click()

# 替换为自己的常用手机号/邮箱、密码
driver.find_element_by_xpath('//input[@placeholder="请输入常用手机号/邮箱"]').send_keys("XXXXXXXXXXX")
driver.find_element_by_xpath('//input[@placeholder="请输入密码"]').send_keys("XXXXXX")

driver.find_element_by_xpath('//div[@class="login-checked"]/img[@class="no-checked"]').click()
driver.find_element_by_xpath('//div[@class="login-btn login-password sense_login_password btn-green"]').click()

在这里插入图片描述
4、图片识别验证

此处休眠10秒左右,供手动验证;

time.sleep(10)

手动验证完毕,点击确认,就登录成功了;

5、点击小铃铛,点击查看全部消息,跳转至简历邀约汇总界面

driver.find_element_by_xpath('//a[@class="msg_group"]').click()
driver.find_element_by_xpath('//div[@class="sc-dlnjwi dJXsSm"]/span').click()

在这里插入图片描述
在这里插入图片描述
6、简历投递邀约实在是太多了😂😂,不过进行自动化之前得先把消息都搞成已读的;不然不好抓取
在这里插入图片描述
7、跳转到这个简历邀约页面,最好休息2秒吧,然后将页面滑动到最底端

time.sleep(2)
driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")

8、初始化邀请列表为空;
大概构思是把每一份简历邀约信息封装成一个小列表invitelistitem,然后再把所有小列表invitelistitem依次存到一个大列表invitelist,算是一个二维列表了;
每一份简历邀约信息里面有很多字段了,都需要存起来的;

invitelist = []

三、抓取拉勾简历邀约界面数据

在这里插入图片描述

while not ('disabled' in driver.find_element_by_xpath('//li[@title="下一页"]').get_attribute('innerHTML')):
    results = driver.find_elements_by_xpath('//div[@class="invites_item__24wcs"]')
    for resultindex in range(1, len(results) + 1):
        positionresult = driver.find_element_by_xpath(
            '(//div[@class="position_header__1tSHC"])[' + str(resultindex) + ']')
        position = positionresult.find_elements_by_xpath('span')[0].text
        region = positionresult.find_elements_by_xpath('span')[1].text
        years = positionresult.find_elements_by_xpath('span')[2].text
        education = positionresult.find_elements_by_xpath('span')[3].text

        company = driver.find_element_by_xpath('(//div[@class="company_name__1hiA6"])[' + str(resultindex) + ']').text
        salary = driver.find_element_by_xpath('(//div[@class="position_salary__1Eg6u"])[' + str(resultindex) + ']').text
        companyresult = driver.find_element_by_xpath(
            '(//div[@class="company_detail__V0K9v"])[' + str(resultindex) + ']')
        companytype = companyresult.find_elements_by_xpath('span')[0].text
        companysize = companyresult.find_elements_by_xpath('span')[1].text
        companyindustry = ''
        companyindustryresults = driver.find_element_by_xpath(
            '(//div[@class="position_labels__21Kg3"])[' + str(resultindex) + ']').find_elements_by_xpath('span')
        for companyindustryresult in companyindustryresults:
            companyindustry = companyindustry + companyindustryresult.text + '、'
        companyindustry = companyindustry[:-1]

        welfare = driver.find_element_by_xpath(
            '(//div[@class="position_describe__2eLo1"])[' + str(resultindex) + ']').text
        hr = driver.find_element_by_xpath('(//div[@class="hr_name__1k6Jk"])[' + str(resultindex) + ']').text
        words = driver.find_element_by_xpath('(//div[@class="inviteContent__zYYpl"])[' + str(resultindex) + ']').text[
                1:-1]
        datetime = driver.find_element_by_xpath('(//span[@class="handle_date__2TPhU"])[' + str(resultindex) + ']').text

        invitelistitem = [datetime, position, salary, region, years, education, company,  companytype, companysize,
                          companyindustry, welfare, hr, words]
        invitelist.append(invitelistitem)

    driver.find_element_by_xpath('//li[@title="下一页"]').click()
    time.sleep(2)
    driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")

说明:

1、这里采用了一个while循环,让selenium可以一直点击“下一页”按钮,直到该按钮无法继续点击才结束;
观察HTML代码可以发现“下一页”按钮可点击时和不可点击时的区别:
可点击:
在这里插入图片描述
在这里插入图片描述

不可点击:
在这里插入图片描述
在这里插入图片描述
可以看到,“下一页”按钮不可点击时,其HTML代码里面多了一个“disabled”,
于是,这里使用'disabled' in driver.find_element_by_xpath('//li[@title="下一页"]').get_attribute('innerHTML')进行判断,直到下一页按钮的HTML代码里面有了“disabled”就不再继续点击了;

2、各字段数据抓取并存放到指定列表:
这里很简单了,先通过xpath获取到当前页面总共的简历邀约数量len(results),然后利用for循环和range进行遍历,通过xpath及text获取到每一个元素的值,紧接着按照一定的顺序存放到小列表invitelistitem,for的一次循环结束,就把小列表invitelistitem添加进大列表invitelist
把当前页面的数据处理完就点击“下一页”按钮,进入下一页,然后休息2秒,滑动到最底部,进行下一次的for的循环的数据处理操作;
最后就得到了一个汇总的二维数据列表invitelist

四、存放数据到excel

1、关闭浏览器驱动

driver.quit()

2、创建excel,并移除默认Sheet页,创建本次Sheet页

wb = openpyxl.Workbook()
wb.remove(wb["Sheet"])
result_datetime = time.strftime("%Y-%m-%d %H-%M-%S", time.localtime())
result_sh = wb.create_sheet(result_datetime+'-拉勾简历邀约抓取')

3、写入列头,这个顺序按照刚才往小列表invitelistitem里面添加数据的顺序

result_title = ['序号','沟通时间','职位','薪资','地区','工作年限','学历','公司名称','融资阶段','规模','行业','福利','联系人','消息']
for i in range(len(result_title)):
    result_sh.cell(row=1, column=i+1, value=result_title[i])

4、将二维列表invitelist的数据加上序号并全部写入Sheet,每一行都是一个小列表invitelistitem的数据

a = 2
for i in invitelist:
    b = 2
    result_sh.cell(row=a, column=1, value=a-1)
    for j in i:
        result_sh.cell(row=a, column=b, value=invitelist[a-2][b-2])
        b += 1
    a += 1

5、保存excel

wb.save(filename=result_datetime+'-拉勾简历邀约抓取'+'.xlsx')

6、这样子就可以在本地的excel文件里面查看到抓取的数据了,记得Ctrl+A全选数据,然后调整至最适合的列宽
在这里插入图片描述

五、制作词云图

1、初始化一个空的集合companynameSet

companynameSet = set()

2、把刚才二维列表invitelist里面的公司名称数据进行提取,并剔除一切可能出现的符号、空格,只保留英文、中文,因为wordcloud会把所有符号、空格当成分割符,最后存入集合companynameSet进行去重

for i in range(len(invitelist)):
    companynameSet.add(invitelist[i][6].replace(' ','').replace('(','').replace('.','').replace(')','').replace('?','').replace('-',''))

3、制作大小为3840*2160的词云图;
这里注意一下,要指定中文字体,不然中文就显示不出来了,然后利用空格把公司名称集合companynameSet里面的元素拼接成一条长长的字符串,最后生成词云图片

w=wordcloud.WordCloud(width=3840,height=2160,font_path=r"C:\Windows\Fonts\msyh.ttc")
w.generate(" ".join(companynameSet))
w.to_file(result_datetime+"-公司分析.png")

在这里插入图片描述

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-03-10 22:56:28  更:2022-03-10 22:57:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 0:12:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码