利用Python爬取QQ群 群成员信息

目标:

爬取群成员,QQ昵称,群昵称,Q龄,入群时间,性别

语言:

Python

依赖库:

Beautifulsoup4,time,urllib,sys,selenium中的webdriver

实现大体思路:

利用腾讯的QQ群管理网站: https://qun.qq.com/

需要用户输入所想爬取的QQ群号、该群人数

并且需要用户在扫描二维码之后,在程序的终端输入Y或者y使程序继续

最后通过beautifulsoup4的依赖库,分析网页文件,并保存到本地生成Excel表格

程序开源?

普通程序,没必要藏着掖着,以下是源码下载。

下载:

源码以及exe可执行文件点击右方下载Download

程序的优缺点:

优点:扫描二维码登录,一切的程序都在本地计算机运行,绝无恶意获取用户的账号密码等非法行为

缺点:最后生成的xls有两个bug

1.由于部分群成员未设置群昵称,导致最终QQ号错位等等

2.如果群成员群昵称过长,在网页上无法完全显示,那么保存在Excel里的也是不完整的。

总结:为什么要做这么一个无聊并且bug又多的程序?

①练练手,入门一些基础依赖库

②图一乐

另:其实可以用Excel中的从url导入表格的功能,或者直接人工复制粘贴到Excel表格中。

源码:(可直接复制,免下载)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import time
import urllib.request
import sys
import win32api
import win32con
from selenium import webdriver
from bs4 import BeautifulSoup
import xlwt

def main():
line =1
row = 0
keyword = {
'0':'序号',
'1':'成员QQ昵称',
'2':'成员群昵称',
'3':'成员QQ号',
'4':'成员性别',
'5':'成员Q龄',
'6':'成员入群时间'
}
prefix='https://qun.qq.com/member.html#gid=' #前缀
url = input('输入您所想爬取的QQ群号:')
number = input('输入该群的人数:')
present_url = prefix + url
driver = webdriver.Firefox()
driver.get(present_url)
boolen = True
while boolen:
in_content = input('请扫描浏览器中的二维码,若已扫描登录输入"Y",若不想继续登录请输入“N”:')
if in_content == "Y" or in_content == "y":
boolen = False
elif in_content == "N" or in_content == 'n':
sys.exit()
else:
print("您的输入有误,请重新输入")

for i in range(1,((int(number)+1)//21)+1):#此for语句作用:模拟滚动,以加载群成员数据
driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
time.sleep(1)

content = driver.page_source #获取网页文件保存在content中
website_name = url+'.html'
with open(website_name, 'w',encoding='utf-8') as f:
f.write(content)
book = xlwt.Workbook(encoding='utf-8') #新建xls文件
sheet = book.add_sheet('sheet',cell_overwrite_ok=True) #新建数据表
file = open(website_name, 'rb') #打开从网页上保存下来的HTML文件
html = file.read()
soup = BeautifulSoup(html,"lxml")
bodys = soup.find_all('div',class_='body')
book_name = url + '.xls' #book_name变量是excel的文件名
for word in range(7): #此for语句是为了在excel表格的第一行中写入信息
sheet.write(0,word,keyword[str(word)])
for body in bodys:
dls = body.find_all('dl')
for dl in dls:
dds = dl.find_all('dd')
for dd in dds:
div_classes = dd.find_all('div',class_='group-memeber')
for div_class in div_classes:
tables = div_class.find_all('table') #左侧的多重For循环为了在HTML中提取群成员数据
for table in tables:
tbodys = table.find_all('tbody',class_='list')
for tbody in tbodys:
trs = tbody.find_all('tr')
for tr in trs:
for row in range(7):
sheet.write(line,row,list(tr.stripped_strings)[row]) #往excel表格中写入群成员数据
line = line +1
book.save(book_name)#保存工作簿
print('已将群成员数据保存在本地目录下!!!!!!!')
main()