cjh0613 发表于 2020-5-20 14:39

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

本帖最后由 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)

主要使用(http://www.seleniumhq.org)+(https://cjh0613.bitbucket.io/redirect/wikipedia/zh-cn.html?s=Google_Chrome),加了(https://cjh0613.bitbucket.io/redirect/wikipedia/zh-cn.html?s=Tk)的简单(https://cjh0613.bitbucket.io/redirect/wikipedia/zh-cn.html?s=图形用户界面),代码比较简单,就不细说了,请自行品味:

## 获取qq好友列表

这个是从QQ充值获取的,可得"原始数据","分组","显示名","QQ号":
1. 会自动打开QQ充值,请网页登陆
2. Q币充值,打开充值界面
3. 充值账号,点更换,打开开列表
4. 点击窗口的'已登陆并打开充值界面,且点开列表'按钮

```python
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/div/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'{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])
            print(,i.next_sibling])
               
    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. 点击窗口的'已登陆并打开界面'按钮

```python
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
                     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.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, encoding='utf-8').decode()
      df = pd.read_html(table, encoding='utf-8', header=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+'.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()
```

Windows10 发表于 2020-5-20 15:42

感谢分享

Zeaf 发表于 2020-5-20 15:05

这就是盗号的常用的吗{:1_926:}

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

你这严禁用于广告,肯定就会被用于发广告···最好还是设置个什么机制防止一下
页: [1] 2
查看完整版本: 获取所有qq好友、全部群所有成员部分信息,并保存列表至电子表格文件以备份信息的爬虫