吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4916|回复: 17
收起左侧

[Python 转载] 获取所有qq好友、全部群所有成员部分信息,并保存列表至电子表格文件以备份信息的爬虫

  [复制链接]
cjh0613 发表于 2020-5-20 14:39
本帖最后由 cjh0613 于 2020-5-21 11:04 编辑

20200521更新详细步骤说明
52pojie的markdown支持有些问题,代码注释识别成了标题,懒得调了,大家将就一下吧,实在受不了可以访问我个人网站查看https://cjh0613.github.io/blog/20200520getQQmembers.html

python获取所有qq好友、全部群所有成员部分信息,并保存列表至电子表格文件以备份信息

警告
仅供备份信息使用,请合理使用此代码,严禁用于广告、信息售卖等反人类用途
使用时请注意不要超负荷访问腾讯服务器

最新代码已传至G站Github:https://github.com/cjh0613/getQQmembers

(欢迎各位改良并Pull Request)

主要使用selenium+chrome,加了Tkinter的简单GUI,代码比较简单,就不细说了,请自行品味:

获取qq好友列表

这个是从QQ充值获取的,可得"原始数据","分组","显示名","QQ号":

  1. 会自动打开QQ充值,请网页登陆
  2. Q币充值,打开充值界面
  3. 充值账号,点更换,打开开列表
  4. 点击窗口的'已登陆并打开充值界面,且点开列表'按钮
import selenium
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import tkinter as tk
from tkinter.filedialog import asksaveasfilename
from bs4 import BeautifulSoup
import lxml
import openpyxl
from openpyxl import Workbook

def callback():
    driver.switch_to_frame('webpay-iframe')
    iframe =driver.find_element_by_xpath('//*[@id="midas-webpay-main-1450000186"]/div[2]/div[1]/iframe')
    driver.switch_to_frame(iframe)
    html=driver.page_source
    soup=BeautifulSoup(html,"lxml")
    a=soup.find_all(attrs={'class':'icon-friend-s'})
    wb = Workbook()
    ws = wb.active
    ws.append(["原始数据","分组","显示名","QQ号"])
    for i in a:
        if i.next_sibling !=' {{el.name}}({{el.qq}})':
            #re,qq匹配:
            #pattern = re.compile(r'[1-9][0-9]{4,}')
            #re,括号匹配:
            #pattern = re.compile(r'(?<=\().*?(?=\))')
            #m = pattern.search(i.next_sibling)
            k=0
            for x in i.next_sibling:

                if x == '(':
                    f=k
                if x == ')':
                    l=k
                k=k+1
            ws.append([i.next_sibling,i.next_sibling.parent.parent.parent.parent.find(attrs={'class':'icon-more-friend'}).next_sibling,i.next_sibling[:f],i.next_sibling[f+1:l]])
            print([i.next_sibling,i.next_sibling.parent.parent.parent.parent.find(attrs={'class':'icon-more-friend'}).next_sibling,i.next_sibling[:f],i.next_sibling[f+1:l]])

    wb.save(asksaveasfilename(defaultextension ='.xlsx',filetypes = [('Excel 工作簿', '*.xlsx')]))

#浏览器位置
driver=webdriver.Chrome()

browser =driver
browser.get("https://pay.qq.com/index.shtml")
root = tk.Tk()
# 设置窗口标题
root.title('从QQ充值获取好友列表——峡州仙士制作')
# 设置窗口大小
root.geometry('400x200')
# 进入消息循环(检测到事件,就刷新组件)
button = tk.Button(root, text='已登陆并打开充值界面,且点开列表', command=callback)
button.pack()
root.mainloop()

获取qq好友列表

这个是从QQ群管理获取的,用了pandas库,导出表格超快,可得成员、群昵称、QQ号、性别、Q龄、入群时间、等级(积分)、最后发言等信息:

  1. 会自动打开QQ群管理,请网页登陆
  2. 登陆成功会在选择QQ群界面
  3. 点击窗口的'已登陆并打开界面'按钮
import selenium
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import tkinter as tk
from tkinter.filedialog import askdirectory
from lxml import etree
import lxml
from bs4 import BeautifulSoup
import pandas as pd
import time

path=askdirectory()

#去字符串两端'\n'、'\t'
def delNT(s):
                       while s.startswith('\n') or s.startswith('\t'):

                               s=s[1:]
                       while s.endswith('\t') or s.endswith('\n'):

                               s=s[:-1]
                       return s

def callback():
    a=driver.find_elements_by_class_name('icon-def-gicon')
    Num= len(a)
    time_start=time.time()
    for i in range(0,Num):

        #点击进入具体群
        a=driver.find_elements_by_class_name('icon-def-gicon')
        #time.sleep(0.5)
        a[i].click()
        time.sleep(1)
        html=driver.page_source
        soup=BeautifulSoup(html,"lxml")
        groupTit=delNT(soup.find(attrs={'id':'groupTit'}).text)
        groupMemberNum=delNT(soup.find(attrs={'id':'groupMemberNum'}).text)

        while len(soup.find_all(attrs={'class':'td-no'}))<int(groupMemberNum):
            driver.execute_script("window.scrollTo(0,document.body.scrollHeight);")
            time.sleep(0.1)
            html=driver.page_source
            soup=BeautifulSoup(html,"lxml")

        res_elements = etree.HTML(html)
        table = res_elements.xpath('//*[@id="groupMember"]')
        table = etree.tostring(table[0], encoding='utf-8').decode()
        df = pd.read_html(table, encoding='utf-8', header=0)[0]
        try:
            print(str(int((time.time()-time_start)/60))+':'+str(int((time.time()-time_start)%60)),'第'+str(i+1)+'群,'+str(int((i+1) / Num * 100))+'%  '+groupTit+'  此表完成')
            writer = pd.ExcelWriter(path+'/'+groupTit+'.xlsx')
            df.to_excel(writer,'Sheet1')
            writer.save()
        except:
            k=0
            for v in groupTit:

                if v == '(':
                    f=k
                if v == ')':
                    l=k
                k=k+1

            writer = pd.ExcelWriter(path+'/'+groupTit[f+1:l]+'.xlsx')
            df.to_excel(writer,'Sheet1')
            writer.save()
        driver.find_element_by_id('changeGroup').click()
        time.sleep(1)

driver=webdriver.Chrome()

browser =driver
browser.get("https://qun.qq.com/member.html")
root = tk.Tk()
# 设置窗口标题
root.title('从QQ群管理获取群成员列表——峡州仙士制作')
# 设置窗口大小
root.geometry('400x200')
# 进入消息循环(检测到事件,就刷新组件)
button = tk.Button(root, text='已登陆并打开界面', command=callback)
button.pack()
root.mainloop()

免费评分

参与人数 7吾爱币 +11 热心值 +7 收起 理由
还是小白azk + 1 + 1 谢谢@Thanks!
513337765 + 1 + 1 谢谢@Thanks!
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
alegems + 1 + 1 热心回复!
迷失自我 + 1 + 1 热心回复!
石头的天空 + 1 + 1 看不懂
Zeaf + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Windows10 发表于 2020-5-20 15:42
感谢分享
Zeaf 发表于 2020-5-20 15:05
dennisfeng 发表于 2020-5-20 15:02
zkq970413 发表于 2020-5-20 15:55
这个厉害了,非常感谢
sonictsui 发表于 2020-5-20 16:07
求分享成品
流浪星空 发表于 2020-5-20 16:08
感谢分享!
雨之幽 发表于 2020-5-20 16:12
附件何在?
小桥下的青蛙 发表于 2020-5-20 16:13
可是……怎么群发邮件
嘴角微微上扬 发表于 2020-5-20 17:33
你这严禁用于广告,肯定就会被用于发广告···最好还是设置个什么机制防止一下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-5 22:22

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表