python爬取qq群成员_Python爬取QQ群群员
昨天发现了一个群中人虽然很多,有一千人,但是没有几个人说话,群中一位朋友说有许多人是死号,我好奇去看了看,发现确实如此,有许多人的空间中说说,照片,日志都是0,访客只有几百,甚至几十,想通过学过的Python做一点事,思路是通过Python+selenium通过浏览器动态登录qq空间,然后通过selenium的find_elements_by_class_name动态获取网页的内容中qq成员的网址,然后存入数组,加载完后,遍历数组中每一个qq成员去加载成员空间网址,之后,通过find_element_by_id得到每个成员的说说,照片,日志数量,当然有的空间限制非好友访问,抓取不到,默认为是活号。还有的空间有自定义空间,与其他空间不同,也抓取不到数据,默认为是活好。只有说说,照片,日志数量都是0的号,我们认为是死号。
于是用Python写了代码查看,结果如下:
其中success:70是访问对方空间成功并且说说,照片,日志的数量不全为0,有70人。
fail:71是访问权限受限,有71人。false:853是访问对方空间成功并且说说,照片,日志的数量全为0,有853人。这说明这个群有853死号,这些号的qq号大多数是10位,以3开头,应该是买来的。
首先:
安装Python3,32位的先,去官网下,然后去找一个集成开发环境(IDE),我安装的pycharm。现在可以抓取一些静态网页了,记住(Python2中urllib2,在Python3中是urllib,自己查),我首先通过浏览器的开发人员工具(快捷键F12)去观看源代码,如图:
查找源代码特征(审查元素是一个好东西,用审查元素能节省你查找信息的时间),发现了一些特征,见图:
每个成员的网址在href中,而且他们都有共同的class,这一点我们可以利用,想到这里,是不是大功告成了?很遗憾,远远不够,我试着获取,却发现没有这个东西。这个文件是动态加载的,跟ajax有关系,(现在许多网页都是动态加载,urllib的作用不如以前,用selenium可以),selenium是什么东西?Selenium也是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。selenium就是一个自动化测试工具。现在有三种方法获取成员的href:直接在开发人员工具中获取,复制到一个文本文件中,然后通过代码读取文件,正则匹配【reg = r'href="http://user.qzone.qq.com/\d{8,11}" class='】,在写入到文件(用realaddr = ''.join(realaddrlist)可以将一个list转换成string,当然有其他方法),然后Python写代码加载成员的空间,判断是否死号。
通过抓包工具(fiddler等),抓包,但我没试过,因为我不知道抓哪个包。
通过Python代码登录QQ空间,进入群空间,用selenium获取成员信息(推荐),这种方式是最好的,因为总不能没查一个网站,就去复制粘贴,正则匹配一番。
下面看登录空间代码:
import urllib
from selenium import webdriver
import time
import win32com.client
option= webdriver.ChromeOptions()
option.add_argument("--test-type")
option.add_argument(r'user-data-dir=******') #设置成用户自己的数据目录(谷歌浏览器用 chrome://version/查个人资料路径)
#chromedriver2.9与chrome不兼容,用chromedriver2.4
driver = webdriver.Chrome(executable_path='c:\chromedriver\chromedriver.exe',chrome_options=option)
#不用上面的数据是可以正常登陆的,即只用下面一行,加载我的数据目录更好
# driver = webdriver.Chrome(executable_path='c:\chromedriver\chromedriver.exe')
#从网页端进入群成员界面,复制网址
driver.get('http://qun.qzone.qq.com/group#!/******/member')
driver.switch_to_frame('login_frame')
driver.find_element_by_id('switcher_plogin').click()
driver.find_element_by_id('u').clear()
#你的qq号
driver.find_element_by_id('u').send_keys('******')
driver.find_element_by_id('p').clear()
#你的密码
driver.find_element_by_id('p').send_keys('*****')
driver.find_element_by_id('login_button').click()
time.sleep(10)
记得chrome浏览器要下载一个chromedriver驱动,怎么下自己去找。登录后:
for handle in driver.window_handles:#方法二,始终获得当前最后的窗口,所以多要多次使用
driver.switch_to_window(handle) #此行代码用来定位当前页面,要不然抓取的不是此页面
#从去空间取得全部成员标签类[数组]
qqslist = driver.find_elements_by_class_name("avatar_50")
print(driver.title)
numqq = 0
path = r'C:\Users\Desktop\qqmsg.txt'
#从去空间取得每个成员的信息[遍历得到网址]
qqhreflist = list()
for qq in qqslist:
qqhref = qq.get_attribute("href")
numqq=numqq+1
print(qqhref)
qqhreflist.append(qqhref)
writeTxt(path,qqhref)
time.sleep(1)
print("getqqs sucesss")
print("start process")
然后到这里已经获取到了所有成员的href数组:qqhreflist,接下来:
wpsApp = win32com.client.Dispatch("KET.Application")
wpsApp.Visible=1
xlBook = wpsApp.Workbooks.Add()
getSele(qqhreflist,xlBook)
try:
xlBook.SaveAs(r"C:\Users\Desktop\qqmsg.xls")
finally:
xlBook.Close()
wpsApp.Quit()
del wpsApp
driver.close()
driver.quit()
这里有一个win32com,自己下载,可能少一个capicom.dll,下载,管理员运行cmd 输入:C:\Windows\SysWOW64\regsvr32.exe C:\Windows\SysWOW64\capicom.dll 就行了,这里我用的wps来接受数据,存入表格。
接下来是重头戏,判别是否是死号,函数getSele(),代码如下:
def getSele(list,xlBook):
xlBook.ActiveSheet.Cells(1, 1).Value = "昵称" xlBook.ActiveSheet.Cells(1, 2).Value = "照片" xlBook.ActiveSheet.Cells(1, 3).Value = "说说" xlBook.ActiveSheet.Cells(1, 4).Value = "日志" path = r'C:\Users\烟魂\Desktop\data1.txt' numfalse = 0 numtrue = 0 numfail = 0 sum=0 for data in list:
sum = sum+1 print("当前第几个:"+str(sum))
driver.get(data)
time.sleep(0.1)
try:
driver.find_element_by_id("QM_Profile_Photo_Cnt")
driver.find_element_by_id("QM_Profile_Mood_Cnt")
driver.find_element_by_id("QM_Profile_Blog_Cnt")
except:
print("fail")
numfail = numfail + 1 try:
user_name = driver.find_elements_by_class_name("user_name")[0].text
if user_name=="":
selfname = "无名字,未知错误" print(selfname)
xlBook.ActiveSheet.Cells(sum + 1, 1).Value = selfname
else:
print(user_name)
xlBook.ActiveSheet.Cells(sum + 1, 1).Value = user_name
xlBook.ActiveSheet.Cells(sum + 1, 2).Value = "-1" xlBook.ActiveSheet.Cells(sum + 1, 3).Value = "-1" xlBook.ActiveSheet.Cells(sum + 1, 4).Value = "-1" print("-1")
writeTxt(path, user_name)
except:
print("none")
selfname = "自定义面板或自己" print(selfname)
xlBook.ActiveSheet.Cells(sum + 1, 1).Value = selfname
continue writeTxt(path, "fail")
continue numphoto = driver.find_element_by_id("QM_Profile_Photo_Cnt").text
nummood = driver.find_element_by_id("QM_Profile_Mood_Cnt").text
numblog = driver.find_element_by_id("QM_Profile_Blog_Cnt").text
if(numblog=="0" and numphoto=="0" and nummood=="0"):
numfalse=numfalse+1 else:
numtrue = numtrue +1 print(driver.title)
print(numphoto)
print(nummood)
print(numblog)
xlBook.ActiveSheet.Cells(sum+1, 1).Value = driver.title
xlBook.ActiveSheet.Cells(sum+1, 2).Value = numphoto
xlBook.ActiveSheet.Cells(sum+1, 3).Value = nummood
xlBook.ActiveSheet.Cells(sum+1, 4).Value = numblog
print("sucess:"+str(numtrue)+" fail:"+str(numfail)+" false:"+str(numfalse))
data = " drivertitle:" + driver.title + " numphoto:" + numphoto + " nummood:" + nummood + " numblog:" + numblog
writeTxt(path, data)
datanum = "numtrue: "+str(numtrue)+" numfalse:"+str(numfalse)+" numfail:"+str(numfail)
print(datanum)
writeTxt(path,datanum)
num = numfalse/(numtrue+numfail+numfalse)
datanums = "num: " + str(num)
print(datanums)
writeTxt(path,datanums)
writeTxt(path,"success")
然后一些其他函数:
def getHtml(url):
page = urllib.request.urlopen(url)
html = page.read()
html = html.decode('UTF-8')
return html
def readTxt(path):
file_object = open(path,'r',encoding= 'utf-8')
try:
all_the_text = file_object.read()
finally:
file_object.close()
return all_the_text
def writeTxt(path,data):
file_object = open(path,'a',encoding= 'utf-8')
try:
file_object.write(data)
finally:
file_object.close()
然后完了,Python自己抓取几十分钟就行了。代码截图
python爬取qq群成员_Python爬取QQ群群员相关推荐
- js解密之QQ的bkn值,获取QQ群成员信息,获取QQ好友列表信息
js解密之QQ的bkn值,获取QQ群成员信息,获取QQ好友列表信息 Lan 2020-05-31 12:13 126 人阅读 0 条评论 QQ群网站:https://qun.qq.com ...
- python爬取qq群成员_Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码...
一位伙计自己开了个游戏室,想在群里拉点人,就用所学知识帮帮忙,于是就有了这篇文章,今天小编特此通过实例代码给大家介绍下Python selenium 加载并保存QQ群成员去除其群主.管理员信息的示例代 ...
- python 下载qq群文件_python获取所有qq好友、全部群所有成员部分信息,并保存列表至电子表格文件...
序 发现上半年压了一堆实用代码,想了一下,还是开源吧.这个就先发布了. 警告 请合理使用此代码,严禁用于广告.信息售卖等反人类用途 使用时请注意不要超负荷访问腾讯服务器 (欢迎各位改良并Pull Re ...
- python 获取qq群成员信息_Python-获取QQ群成员信息并存入excel及redis并发送邮件
'''需求: 1.请求qq群的接口,实现传入一个群号 2.把群里每个人的 昵称.群备注.入群时间.qq号,性别,存到redis里面,用hash类型 {"qq_num":XXX,&q ...
- python 爬取扣扣群成员信息
爬取扣扣群成员 通过 https://qun.qq.com/member.html 这个网页你可以登录网页版的扣扣群号管理. 这样你就可以通过网页来爬取信息了.涉及到个人隐私,这里就不放图片了. 请看 ...
- [原创]22行JavaScript代码实现QQ群成员提取器,绿色、环保、无病毒!
原来想给QQ群内的成员发邮件,找了一个现成的软件,没想到居然有QQ盗号病毒,很不爽.就决定自己动手,丰衣足食. 首先,我想到如果能够直接从QQ群成员列表中把所有成员拷贝出来,岂不是很方便.不过QQ明显 ...
- python 获取qq群成员信息_教你用python爬取自己加入的QQ群成员名单,它们竟然是这样的人...
本次实验环境: 操作系统:Mac OS 开发语言:python 3.6 IDE:jupyter notebook(建议使用) 浏览器:Chrome(版本75.0.3770.100) 需要用到的库:se ...
- python爬取qq群成员_教你用python爬取自己加入的QQ群成员名单
本次实验环境: 操作系统:Mac OS 开发语言:python 3.6 IDE:jupyter notebook(建议使用) 浏览器:Chrome(版本75.0.3770.100) 需要用到的库:se ...
- python抓取qq群消息_Python获取统计自己的qq群成员信息的方法
首先说明一下需要使用的工具以及技术:python3 + selenium selenium安装方法:pip install selenium 前提:获取自己的qq群成员信息,自己必须是群主或者管理员, ...
- python 写脚本 获取qq好友地理位置_Python获取统计自己的qq群成员信息的方法
这篇文章主要介绍了Python获取统计自己的qq群成员信息的方法,本文分步骤给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 首先说明一下需要使用的工具以及技术:python3 + ...
最新文章
- Django-C002-深入模型,到底有多深
- 70%的付费率 手游还在愁什么?
- 使用SAP云平台Mobile Service开发移动应用
- 64位Ubuntu kylin 16.04搭建tftp服务器
- python怎么输出表格中随机数_python 输出一个随机数
- android 指示灯权限,Android实现LED灯显示效果
- Java 多线程 南北多人过桥
- 如何在linux系统中设置静态ip地址
- pytest-Mark数据驱动
- 戴着人工心脏上脱口秀大会——王十七的充电人生
- Win8笔记本不能正常关机或重启
- 计算机的奇迹英语作文,高中英语作文范文:奇迹
- 论文笔记 NLPCC 2016|A Convolution BiLSTM Neural Network Model for Chinese Event Extraction
- 被 HR 直接怼:估计你一辈子就是个程序员
- 【Vuforia】最佳实践:支持作为模型目标(Model Targets)的对象和CAD模型
- 【算法学习笔记】65. 双向扫描 SJTU OJ 1382 畅畅的牙签盒
- 用 VR 玩《魔兽世界》是一种怎样的体验?
- css实现网页背景图片位置不随滚动条改变
- 视频点播系统搭建有哪些可选方案?
- 如何复现论文?什么是论文复现?