昨天发现了一个群中人虽然很多,有一千人,但是没有几个人说话,群中一位朋友说有许多人是死号,我好奇去看了看,发现确实如此,有许多人的空间中说说,照片,日志都是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群群员相关推荐

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

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

  2. python爬取qq群成员_Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码...

    一位伙计自己开了个游戏室,想在群里拉点人,就用所学知识帮帮忙,于是就有了这篇文章,今天小编特此通过实例代码给大家介绍下Python selenium 加载并保存QQ群成员去除其群主.管理员信息的示例代 ...

  3. python 下载qq群文件_python获取所有qq好友、全部群所有成员部分信息,并保存列表至电子表格文件...

    序 发现上半年压了一堆实用代码,想了一下,还是开源吧.这个就先发布了. 警告 请合理使用此代码,严禁用于广告.信息售卖等反人类用途 使用时请注意不要超负荷访问腾讯服务器 (欢迎各位改良并Pull Re ...

  4. python 获取qq群成员信息_Python-获取QQ群成员信息并存入excel及redis并发送邮件

    '''需求: 1.请求qq群的接口,实现传入一个群号 2.把群里每个人的 昵称.群备注.入群时间.qq号,性别,存到redis里面,用hash类型 {"qq_num":XXX,&q ...

  5. python 爬取扣扣群成员信息

    爬取扣扣群成员 通过 https://qun.qq.com/member.html 这个网页你可以登录网页版的扣扣群号管理. 这样你就可以通过网页来爬取信息了.涉及到个人隐私,这里就不放图片了. 请看 ...

  6. [原创]22行JavaScript代码实现QQ群成员提取器,绿色、环保、无病毒!

    原来想给QQ群内的成员发邮件,找了一个现成的软件,没想到居然有QQ盗号病毒,很不爽.就决定自己动手,丰衣足食. 首先,我想到如果能够直接从QQ群成员列表中把所有成员拷贝出来,岂不是很方便.不过QQ明显 ...

  7. python 获取qq群成员信息_教你用python爬取自己加入的QQ群成员名单,它们竟然是这样的人...

    本次实验环境: 操作系统:Mac OS 开发语言:python 3.6 IDE:jupyter notebook(建议使用) 浏览器:Chrome(版本75.0.3770.100) 需要用到的库:se ...

  8. python爬取qq群成员_教你用python爬取自己加入的QQ群成员名单

    本次实验环境: 操作系统:Mac OS 开发语言:python 3.6 IDE:jupyter notebook(建议使用) 浏览器:Chrome(版本75.0.3770.100) 需要用到的库:se ...

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

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

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

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

最新文章

  1. Django-C002-深入模型,到底有多深
  2. 70%的付费率 手游还在愁什么?
  3. 使用SAP云平台Mobile Service开发移动应用
  4. 64位Ubuntu kylin 16.04搭建tftp服务器
  5. python怎么输出表格中随机数_python 输出一个随机数
  6. android 指示灯权限,Android实现LED灯显示效果
  7. Java 多线程 南北多人过桥
  8. 如何在linux系统中设置静态ip地址
  9. pytest-Mark数据驱动
  10. 戴着人工心脏上脱口秀大会——王十七的充电人生
  11. Win8笔记本不能正常关机或重启
  12. 计算机的奇迹英语作文,高中英语作文范文:奇迹
  13. 论文笔记 NLPCC 2016|A Convolution BiLSTM Neural Network Model for Chinese Event Extraction
  14. 被 HR 直接怼:估计你一辈子就是个程序员
  15. 【Vuforia】最佳实践:支持作为模型目标(Model Targets)的对象和CAD模型
  16. 【算法学习笔记】65. 双向扫描 SJTU OJ 1382 畅畅的牙签盒
  17. 用 VR 玩《魔兽世界》是一种怎样的体验?
  18. css实现网页背景图片位置不随滚动条改变
  19. 视频点播系统搭建有哪些可选方案?
  20. 如何复现论文?什么是论文复现?

热门文章

  1. 怎么查看本机的IP地址
  2. roseha linux,ROSEHA双机软件图解安装配置linux.docx
  3. 计算机考研里的【计算机系统结构、计算机软件与理论、计算机应用技术】都是什么意思?如何选择?...
  4. hadoop部分架构图
  5. 教你轻松安装Adobe Acrobat XI Pro(编辑PDF使用的)
  6. windows批处理bat脚本实现微信告警——监控系统WGCLOUD
  7. 宏杉科技 难忘十年
  8. Python基础教程(第3版)PDF
  9. Java基础语法练习题
  10. 优秀课程案例:使用Scratch制作坦克大战经典版!