Python爬虫抓取slack组里的用户信息

2024-03-26 11:40

本文主要是介绍Python爬虫抓取slack组里的用户信息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

需求说明

国外很多产品社区运营都是用slack,并且设置多个频道作为群组来交流, 昨天突发奇想,想抓一个感兴趣的群组里的人员信息,里面超过1万人,手动抓取肯定不现实。 作为程序员,作为python程序员,一定是要想办法自动化的,在网上搜了一圈,发现这个开源的python自动化库不错,clicknium 就开始动手尝试.

环境准备

本人开发环境:windows 10, visual studio code

  • 参见getting started

创建目录

直接新建一个folder

方案思路

进去slack的频道,右上角会显示人数,点击会弹窗,

编辑

添加图片注释,不超过 140 字(可选)

循环遍历弹窗里的人员信息,先存取人员列表信息,然后再根据人员名称搜索人名显示个人详细信息获取邮箱电话等信息,存入列表中。

from clicknium import clicknium as cc, locator
from clicknium.common.enums import *
import json
import oscc.find_element(locator.slack.text_all).click()
members = cc.find_element(locator.slack.tabitem_members).get_text()
print(members)
count = int(members.split(' ')[1].replace(',', ''))
cc.find_element(locator.slack.edit_成员名称).click(by='mouse-emulation')
cc.send_hotkey("{DOWN}")step = 0
names = []
if os.path.exists("data.json"):with open("data.json", 'r') as myfile:data=myfile.read()# parse filenames = json.loads(data)
step = len(names)
if step > 0:for _ in range(step):cc.send_hotkey("{DOWN}")def NotContains(name):for item in names:if item['name'] == name:return Falsereturn Truedef SaveToFile():jsonString = json.dumps(names)jsonFile = open("data.json", "w")jsonFile.write(jsonString)jsonFile.close()while step<count:for i in range(1,13):dict = {"index":i}if not cc.is_existing(locator.slack.listitem_member, dict):continueelem_member = cc.find_element(locator.slack.listitem_member, dict)name = elem_member.get_text()#print(name)if NotContains(name):names.append({'name':name,'email':'', 'postfix':''})step += 1print(name)if step % 100 == 0:SaveToFile()cc.find_element(locator.slack.edit_成员名称).click(by='mouse-emulation')for i in range(10):cc.send_hotkey("{DOWN}")SaveToFile()

说明:

  • 先点击右上角显示人数的按钮,弹出人员信息列表弹窗

  • 获取人数

  • 循环获取listiten的信息

  • 由于这个列表是动态加载的,所以没获取10个,就通过发送多次Down的快捷键向下滚动,让页面动态加载后续的人员信息

  • 在存储列表时根据名称进行去重

 
from operator import contains
from clicknium import clicknium as cc, locator, ui
from clicknium.common.enums import *
import json
import osnames = []
if os.path.exists("data.json"):with open("data.json", 'r') as myfile:data=myfile.read()# parse filenames = json.loads(data)def SaveToFile():jsonString = json.dumps(names)jsonFile = open("data.json", "w")jsonFile.write(jsonString)jsonFile.close()step = 0
for item in names:if len(item['email']) == 0:cc.find_element(locator.slack.text_all).click()cc.find_element(locator.slack.edit_成员名称).set_text(item['name'], "set-text")cc.find_element(locator.slack.list_member1).click()email = cc.find_element(locator.slack.text_email).get_text()item['email'] = emailitem['postfix'] = email.split('@')[1]step += 1if step % 20 == 0:SaveToFile()cc.find_element(locator.slack.close_image).click()
SaveToFile()

说明:

  • 先点击右上角显示人数的按钮,弹出人员信息列表弹窗

  • 循环上面步骤获取到的人员列表

  • 输入用户名进行搜索,然后点击‘查看完整的个人档案’

  • 获取邮箱等信息,会做错误处理

  • 关闭详细信息侧边栏,

  • 更新信息到列表中保存

  • 循环处理下一个用户信息

录制的locator可以自行使用clicknium提供的录制器来录制,操作教程可以看clicknium vscode的说明,非常详细的操作说明。

这篇关于Python爬虫抓取slack组里的用户信息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/848384

相关文章

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

Python中反转字符串的常见方法小结

《Python中反转字符串的常见方法小结》在Python中,字符串对象没有内置的反转方法,然而,在实际开发中,我们经常会遇到需要反转字符串的场景,比如处理回文字符串、文本加密等,因此,掌握如何在Pyt... 目录python中反转字符串的方法技术背景实现步骤1. 使用切片2. 使用 reversed() 函

Python中将嵌套列表扁平化的多种实现方法

《Python中将嵌套列表扁平化的多种实现方法》在Python编程中,我们常常会遇到需要将嵌套列表(即列表中包含列表)转换为一个一维的扁平列表的需求,本文将给大家介绍了多种实现这一目标的方法,需要的朋... 目录python中将嵌套列表扁平化的方法技术背景实现步骤1. 使用嵌套列表推导式2. 使用itert

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Python使用pip工具实现包自动更新的多种方法

《Python使用pip工具实现包自动更新的多种方法》本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/C... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Conda与Python venv虚拟环境的区别与使用方法详解

《Conda与Pythonvenv虚拟环境的区别与使用方法详解》随着Python社区的成长,虚拟环境的概念和技术也在不断发展,:本文主要介绍Conda与Pythonvenv虚拟环境的区别与使用... 目录前言一、Conda 与 python venv 的核心区别1. Conda 的特点2. Python v

Python使用python-can实现合并BLF文件

《Python使用python-can实现合并BLF文件》python-can库是Python生态中专注于CAN总线通信与数据处理的强大工具,本文将使用python-can为BLF文件合并提供高效灵活... 目录一、python-can 库:CAN 数据处理的利器二、BLF 文件合并核心代码解析1. 基础合

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文