Python–selenium 加载并保存QQ群成员,去除其群主、管理员信息。

基本思路

  • 模拟登陆页面
    • 页面分析
    • 代码实现
  • 选择所需加载群
    • 页面分析
    • 代码实现
  • 保存所需信息
    • 页面分析
    • 代码实现
  • 完整代码
    • 很多人学习python,不知道从何学起。
      很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
      很多已经做案例的人,却不知道如何去学习更加高深的知识。
      那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!??¤
      QQ群:623406465

模拟登陆页面

页面分析

思路:
点击登陆按钮
选择要登陆的账号

代码实现

# Author:smart_num_1
# Blog:https://blog.csdn.net/smart_num_1
# WeChat:Be_a_lucky_dogfrom selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWaitdef login(driver = None):already_dic = {}# 创建一个字典,保存电脑登陆的QQlogin_button = WebDriverWait(driver = driver,timeout = 100).until(EC.presence_of_element_located((By.XPATH,'//p[@class="user-info"]/a')))login_button.click()# 点击登录,获取电脑登陆的QQalready_login_number = WebDriverWait(driver = driver,timeout = 100).until(EC.presence_of_element_located((By.XPATH,'//div[@id="loginWin"]/iframe')))driver.get(url = already_login_number.get_attribute('src'))# 此步骤目的,是因为登录框是一个子页面,在上一级页面中获得到的这个子页面already_login_numbers = WebDriverWait(driver = driver,timeout = 100).until(EC.presence_of_all_elements_located((By.XPATH,'//span[contains(@class,"nick")]')))# 获取电脑登陆的QQprint('在以下账号中选择所需账号')for already_login_number in already_login_numbers:already_dic[already_login_number.get_attribute('innerText')] = already_login_numberprint(already_login_number.get_attribute('innerText'))QQ_NeedToLogin = input('需要登陆: ')# 通过获取键名,在 already_dic 获得相应的键值already_dic[QQ_NeedToLogin].click()# 模拟点击要登陆的QQ,达到登陆的效果time.sleep(1)if __name__ == '__main__':start_url = 'https://qun.qq.com/index.html#click'  # 群首页,用来登陆账号driver = webdriver.Chrome(executable_path = './chromedriver.exe')# 因为selenium 需要用到浏览器、浏览器驱动,但是还要配置环境变量,很麻烦,如果这样指定 webdriver 路径的话,就可以省去那一步driver.get(url=start_url)login(driver=driver)

选择所需加载群

页面分析

打开群管理界面,会看到这样的信息,我们的目的是爬取已加入群的成员信息

代码实现

# Author:smart_num_1
# Blog:https://blog.csdn.net/smart_num_1
# WeChat:Be_a_lucky_dogdef get_group_number(driver = None):group_number_dic = {}# 同样的,利用字典储存信息my_group_list = WebDriverWait(driver = driver,timeout = 100).until(EC.presence_of_all_elements_located((By.XPATH,'//ul[@class="my-group-list"]/li')))# 获取每个已加入群的节点信息print('在以下群中选择:')i = 1for my_group in my_group_list:try:group_number_dic[str(i)] = my_groupprint('第 %s 个--- '%str(i) + my_group.get_attribute('title') + ' ' + my_group.get_attribute('data-id'))i += 1except:continue# 打印出获得的群信息,获取所有的目标群group = input('获取群编号 : ')# 通过键名获取键值,得到要点击的目标group_number_dic[group].click()return driverif __name__ == '__main__':member_url_test = 'https://qun.qq.com/member.html'driver.get(url = member_url_test)driver = get_group_number(driver=driver)

保存所需信息

页面分析

可以看到,是个动态加载的页面,因为用的是selenium,所以就没必要分析到底是通过请求那个url得到的信息,直接模拟滚动获取就可以了

代码实现

# Author:smart_num_1
# Blog:https://blog.csdn.net/smart_num_1
# WeChat:Be_a_lucky_dogdef get_group_member(driver = None):driver.refresh()# 刷新一下界面,防止上一步点击过后,页面不更新的情况elem_end = WebDriverWait(driver = driver,timeout = 100).until(EC.presence_of_element_located((By.XPATH,'//td[@class="td-user-nick"]/img')))# 添加了等待,这个定位可以随便的选择,确保页面加载完毕的for i in range(10):time.sleep(0.5)driver.execute_script("var action=document.documentElement.scrollTop=10000")print('加载中······')# 这个滚动范围可以任选,因为每次会加载21个信息,我看过我加的群,在10次过后的成员基本属于潜水的人了,要不要的就无所谓了group_members = driver.find_elements_by_xpath('//tr[contains(@class,"mb")]')for group_member in group_members:try:data = group_member.text.split('\n')[2].split(' ')[0]# 这一步,得到一个列表,从第一位开始分别是成员、群昵称、QQ号、性别、Q龄、入群时间、等级(积分)、最后发言,在这里我是只需要QQ号码#对于其他信息,根据自己需要,添加代码即可if data.isdigit() == True:with open('./record.txt','a',encoding = 'utf-8') as record:record.write(data + '@qq.com')record.write('\n')except:continueprint('Loaded')

完整代码

# Author:smart_num_1
# Blog:https://blog.csdn.net/smart_num_1
# WeChat:Be_a_lucky_dogfrom selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.chrome.options import Options
import time
import random
import osdef get_group_member(driver = None):driver.refresh()elem_end = WebDriverWait(driver = driver,timeout = 100).until(EC.presence_of_element_located((By.XPATH,'//td[@class="td-user-nick"]/img')))for i in range(10):time.sleep(0.5)driver.execute_script("var action=document.documentElement.scrollTop=10000")print('加载中······')group_members = driver.find_elements_by_xpath('//tr[contains(@class,"mb")]')for group_member in group_members:try:data = group_member.text.split('\n')[2].split(' ')[0]if data.isdigit() == True:with open('./record.txt','a',encoding = 'utf-8') as record:record.write(data + '@qq.com')record.write('\n')except:continueprint('Loaded')def get_group_number(driver = None):group_number_dic = {}my_group_list = WebDriverWait(driver = driver,timeout = 100).until(EC.presence_of_all_elements_located((By.XPATH,'//ul[@class="my-group-list"]/li')))print('在以下群中选择:')i = 1for my_group in my_group_list:try:group_number_dic[str(i)] = my_groupprint('第 %s 个--- '%str(i) + my_group.get_attribute('title') + ' ' + my_group.get_attribute('data-id'))i += 1except:continuegroup = input('获取群编号 : ')group_number_dic[group].click()return driverdef login(driver = None):already_dic = {}login_button = WebDriverWait(driver = driver,timeout = 100).until(EC.presence_of_element_located((By.XPATH,'//p[@class="user-info"]/a')))login_button.click()already_login_number = WebDriverWait(driver = driver,timeout = 100).until(EC.presence_of_element_located((By.XPATH,'//div[@id="loginWin"]/iframe')))driver.get(url = already_login_number.get_attribute('src'))already_login_numbers = WebDriverWait(driver = driver,timeout = 100).until(EC.presence_of_all_elements_located((By.XPATH,'//span[contains(@class,"nick")]')))print('在以下账号中选择所需账号')for already_login_number in already_login_numbers:already_dic[already_login_number.get_attribute('innerText')] = already_login_numberprint(already_login_number.get_attribute('innerText'))QQ_NeedToLogin = input('需要登陆: ')already_dic[QQ_NeedToLogin].click()time.sleep(1)def start(driver = None,url = None):print('Please wait for loading\n')driver.get(url = url)driver = get_group_number(driver=driver)print('Please wait for loading\n')get_group_member(driver=driver)if __name__ == '__main__':print('Please wait for loading')chrome_options=Options()chrome_options.add_argument('--headless')try:random.seed(time.time())QQ_number = '738334209'start_url = 'https://qun.qq.com/index.html#click'member_url = 'https://qun.qq.com/member.html#gid=%s'%QQ_numbermember_url_test = 'https://qun.qq.com/member.html'driver = webdriver.Chrome(executable_path = './chromedriver.exe',chrome_options=chrome_options)try:driver.get(url=start_url)login(driver=driver)while True:start(driver = driver,url = member_url_test)flag = input('是否继续爬取? yes or no : ')if flag == 'no':breakos.system('cls')driver.quit()except:print('Something wrong')driver.quit()except:print('Something wrong!!!!!!')os.system('pause')

Python爬虫教程,利用Python采集QQ群成员信息相关推荐

  1. 利用python获取自己的qq群成员信息!

    利用python获取自己的qq群成员信息! 首先说明一下需要使用的工具以及技术:python3 + selenium ,如有兴趣可以加群交流噢 selenium安装方法:pip install sel ...

  2. python 写脚本 获取qq好友地理位置_Python获取统计自己的qq群成员信息的方法

    这篇文章主要介绍了Python获取统计自己的qq群成员信息的方法,本文分步骤给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 首先说明一下需要使用的工具以及技术:python3 + ...

  3. python抓取qq群消息_Python获取统计自己的qq群成员信息的方法

    首先说明一下需要使用的工具以及技术:python3 + selenium selenium安装方法:pip install selenium 前提:获取自己的qq群成员信息,自己必须是群主或者管理员, ...

  4. js解密之QQ的bkn值,获取QQ群成员信息,获取QQ好友列表信息

    js解密之QQ的bkn值,获取QQ群成员信息,获取QQ好友列表信息   Lan   2020-05-31 12:13   126 人阅读  0 条评论 QQ群网站:https://qun.qq.com ...

  5. python爬虫教程视频-python爬虫(入门教程、视频教程)

    python的版本经过了python2.x和python3.x等版本,无论哪种版本,关于python爬虫相关的知识是融会贯通的,脚本之家关于爬虫这个方便整理过很多有价值的教程,小编通过本文章给大家做一 ...

  6. python爬虫教程书籍-python爬虫有哪些书(python爬虫教程知乎)

    python爬虫有哪些书 python有哪?下面给大家介绍6本有关爬书: 更多Python书籍推荐,可以参考这篇文<想学python看哪些书> 1.Python网络爬虫实战 本书从Pyth ...

  7. python 获取qq群成员信息_[Python-ItChat]获取微信所有好友, 群信息(群内人员),批量添加好友,自动发送信息等...

    New 09.10 降低使用门槛, 编译生成exe 使用方法 下载exe,双击, 然后扫码-> 同级目录下生成friends.txt和chatrooms.txt[格式为json]对应的是好友列表 ...

  8. python 获取qq群成员信息_python 获取qq群成员列表数据

    #!/usr/bin/python # -*- coding: utf-8 -*- import re import time import xlsxwriter from selenium impo ...

  9. python 获取qq群成员信息_用Python编写工具获取QQ群成员的昵称和号码,使用,及,小...

    使用火狐浏览器进行数据的抓取,火狐浏览器对json比较友好 进入QQ群官网: 登录后,点击成员管理: 先随机选择一个群,抓取一下信息,找一下规律 打开浏览器控制台,重新刷新网页: 这是我们想要的一些信 ...

  10. (获取qq群成员信息,并下载头像,每个群保存一个文件夹)

    # 1.获取到自己qq里面所有的群,并且保存每个群里面的群成员信息到mongodb里面# 下载每个群的群成员的头像# 1.抓包,抓到获取自己所有qq群的接口 requests模块 https://qu ...

最新文章

  1. Qt Creator添加新的自定义向导
  2. atoi() 与 itoa()函数用法
  3. 线程池拒绝策略-RejectedExecutionHandler
  4. 所有自然数相加的和是-1/12,你信吗?
  5. Sublime Text3:显示/隐藏侧边栏快捷键 修改侧边栏颜色、字体大小
  6. Windows Installer Cleanup Utility 下载和使用说明
  7. 【阿卡乐谱】【日常分享】超级强大的简谱-《茉莉花》
  8. python实时监控文件夹内文件数量变化_python 监控文件夹变化
  9. gem5中的O3 Pipeline Viewer Visualization实现方法
  10. curl ip.sb查询公网ip
  11. 教你替换文件名,如何批量更改部分文件名的操作方法
  12. AI系统识别早期败血症,减少患者死亡率
  13. 览沃livox_大疆内部孵化的览沃科技Livox推出激光雷达,进入自动驾驶领域
  14. 小程序加入人脸识别_微信小程序+人脸识别
  15. 升级版Python学习教程:SQLAlchemy太庞大,不妨试试这位小清新-Peewee
  16. linux虚拟机安装sd卡,使用Vmware虚拟机安装RHEL 6.0
  17. .bin二进制文件转换为.txt(.bin)文件
  18. android框架结构
  19. opencv标定实现总结(圆点,棋盘格和非对称圆点)
  20. 日本疫情 和 goto旅行优惠

热门文章

  1. cad放大_dwg文件怎么打开?CAD看图,360°精确识别CAD图块,细节见真章
  2. nginx 映射ip端口服务
  3. json转对象的时候字段为空值的时候会被过滤
  4. 如何写一份优秀的Web前端简历【面试秘籍】
  5. java多元一次方程组求解_java 怎么解多元一次不定方程组
  6. Uncaught RangeError: Maximum call stack size exceeded 超出最大调用值(个人解释)
  7. windows10pygame下载安装问题描述
  8. 信号与系统2022春季学期:作业内容与参考答案-汇总
  9. 软考高级-系统架构师-论文
  10. java如何面试别人_Java面试如何考察候选人