登录qq空间
升级代码,升级了一次代码升级后不需要进行selenium库的安装,只需要安装requests库即可。
网址https://blog.csdn.net/qq_41861526/article/details/80946702
目的:这个小项目的目的,是获取有哪些陌生人的qq空间可以访问,没有被拒绝(好吧,是有点无聊,其实还是以这个项目,来讲如何传递selenium的cookie给requests里面的session,以及session如何保存cookies)。
这里采用selenium获取cookie,再通过赋值cookie给session实现对qq空间的操作。
前言:
我想要爬取其他人的qq空间的话,那么就一定要以登录状态去爬取,但是由于时间有限,没有办法取破译密码和账号是怎么加密的,而且只要qq空间对加密方式做一点改变的话,就要去改登录部分的代码,所以很不方便,这里采用的是cookies形式的登录,理论上可以说明,这个办法可以千年不改变,一直可以登录,不管qq空间登录做了什么改变。
前期准备:
1、下载selenium
pip install selenium
2、还需要一个浏览器来搭配selenium来使用,这里我使用的是火狐,其他的可以自己上csdn看使用方法。有了火狐浏览器还需要配置火狐浏览器链接,这里给出来一个参考配置方式:点击打开链接。
做完这两步时候,就算是前期准备工作完成了。
开始:
1、通过selenium登录获取cookie:
def login():
from selenium import webdriver#调用这个模块
driver = webdriver.Firefox()
driver.get('https://user.qzone.qq.com/')#获取qq登录界面
global session#这里的话,是将session变成全局变量,这样子就能保证整个程序里面sesssion的cookie都是一样
time.sleep(10)#这里给10秒,是给时间给你扫码,或者输入时间进行登录,因为selenium是不知道你什么时候输入密码完成的,所以必须要自己去管
with open(r'C:\Users\asus\Desktop\cookies.txt', 'w+') as f:#这里是将得到的cookie进行保存,这样就不用每次启动程序都要登录
for cookie in driver.get_cookies():
print(cookies)
f.write(cookie['name']+'=='+cookie['value']+'\n')
f.close()
函数运行结束后大概会生成这样一个文件:
但是我们每次登录总不能都要扫码,或者输入账号,太麻烦了,所以这里我也采用了cookie登录的代码:
def cookielogin():
global session#设置全局变量
headers = {'User-Agent': 'Mozilla/5.0 (windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0',
'referer': 'https://qzone.qq.com/',
'Host': 'user.qzone.qq.com'}
with open(r'C:\Users\asus\Desktop\cookies.txt', 'r') as f:#从文本中获取到cookies并且变成可使用的cookies的格式
ans = f.readlines()
for an in ans:
an = an.replace('\n', '')
a = an.split('==')
cookies[a[0]] = a[1]
cookies['_qz_referrer'] = 'i.qq.com'
requests.utils.add_dict_to_cookiejar(session.cookies,cookies)#这里就是将cookie和session绑定在一起
r=session.get('https://user.qzone.qq.com/1694851090/infocenter',headers=headers,verify=False)#
if not re.findall('QQ空间-分享生活,留住感动',r.text):#判断是否有这个,来判断是否登录成功
return True
else :
return false
'''登录成功的话,返回True,否则返回False'''
2、获取没被拒绝的qq空间的号码:
我这里首先是在自己的qq空间获取一些qq的号码,然后再在这些qq号码里面去获取其他qq。再去访问这些号码,还是根据title标签判断自己是否被访问拒绝。
我们根据<title>QQ空间-分享生活,留住感动</title>这里来判断是否被拒绝。
我们这里采用了广度搜索的形式来进行扩展好友搜索。我这里采用队列的形式,及先进先出,否则和你关系近的反而是最后访问,这样明显不可取。我这里设置了当采集了1000个的时候,会自动退出来。(Python如何实现广搜在我的这篇文章里面有提到)
现在放代码:
r=session.get('https://user.qzone.qq.com/%s'%(user),headers=headers,verify=False)
numble=re.findall('uin="(\d*?)"',r.text)#查找自己qq空间里面的好友,获取的是点赞的,因为点赞的话,说明这个人比较活跃,在qq玩的比较多
for uin in numble:
q.put(uin)#将获取到的qq加入队列
while 1:
if q.qsize()<=1000:
r=session.get('https://h5.qzone.qq.com/proxy/domain/ic2.qzone.qq.com/cgi-bin/feeds/feeds_html_act_all?uin=%s&hostuin=%s&start=10&count=60'%(user,q.get()),headers=headers,cookies=cookies,verify=False)
ans=re.findall('(\d{8,10})',r.text,re.S)#获取他人qq空间里面的好友
ans=set(ans)
for an in ans :
url='https://user.qzone.qq.com/%s'%(an)
r=session.get(url,headers=headers,cookies=cookies,verify=False)
if not len(re.findall('QQ空间-分享生活,留住感动',r.text,re.S)):#判断访问是否被拒绝,如果没有被拒绝就输出这个人的qq空间链接,并且加入队列
print(url)
if q.qsize() <= 1000:
q.put(an)
else:
break
else:
break
运行过程:
完整代码:
import requests
import re
import time
import urllib3
from queue import Queue
urllib3.disable_warnings()
session =requests.session()
user=input('输入登录的qq号:')
def cookielogin():
global session
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0',
'Referer': 'https://qzone.qq.com/',
'Host': 'user.qzone.qq.com'}
with open(r'C:\Users\asus\Desktop\cookies.txt', 'r') as f:
ans = f.readlines()
for an in ans:
an = an.replace('\n', '')
a = an.split('==')
cookies[a[0]] = a[1]
cookies['_qz_referrer'] = 'i.qq.com'
print(cookies)
requests.utils.add_dict_to_cookiejar(session.cookies,cookies)
r=session.get('https://user.qzone.qq.com/%s/infocenter'%(user),headers=headers,verify=False)
if not re.findall('QQ空间-分享生活,留住感动',r.text):
return True
else :
return False
def login():
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('https://user.qzone.qq.com/')
global session
time.sleep(10)
with open(r'C:\Users\asus\Desktop\cookies.txt', 'w+') as f:
for cookie in driver.get_cookies():
f.write(cookie['name']+'=='+cookie['value']+'\n')
f.close()
if __name__=="__main__":
cookies={}
q=Queue(maxsize=1000)
url='https://user.qzone.qq.com/'
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0',
'Referer': 'https://qzone.qq.com/',
'Host': 'user.qzone.qq.com'}
if not cookielogin():
login()
r=session.get('https://user.qzone.qq.com/%s'%(user),headers=headers,verify=False)
numble=re.findall('uin="(\d*?)"',r.text)
for uin in numble:
q.put(uin)
while 1:
if q.qsize()<=1000:
r=session.get('https://h5.qzone.qq.com/proxy/domain/ic2.qzone.qq.com/cgi-bin/feeds/feeds_html_act_all?uin=%s&hostuin=%s&start=10&count=60'%(user,q.get()),headers=headers,cookies=cookies,verify=False)
ans=re.findall('(\d{8,10})',r.text,re.S)
ans=set(ans)
for an in ans :
url='https://user.qzone.qq.com/%s'%(an)
r=session.get(url,headers=headers,cookies=cookies,verify=False)
if not len(re.findall('QQ空间-分享生活,留住感动',r.text,re.S)):
print(url)
if q.qsize() <= 1000:
q.put(an)
else:
break
else:
break
因为是自己的qq号所以就没有加线程或者是进程,怕被封。。。。。
写的有点烂,希望别嫌弃。
这是第二版本的qq空间爬取增加了限定功能。比如你想要查看的性别和年龄范围
import requests
import re
import time
import urllib3
from queue import Queue
urllib3.disable_warnings()
session =requests.session()
user=input("输入你要登录的qq号:")
wsex=input('你想要的qq空间主人的性别:')
pre=int(input('qq空间的主人最小几岁:'))
order=int(input('qq空间的主人最大几岁:'))
def cookielogin():
global session
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0',
'Referer': 'https://qzone.qq.com/',
'Host': 'user.qzone.qq.com'}
with open(r'C:\Users\asus\Desktop\cookies.txt', 'r') as f:
ans = f.readlines()
for an in ans:
an = an.replace('\n', '')
a = an.split('==')
cookies[a[0]] = a[1]
cookies['_qz_referrer'] = 'i.qq.com'
print(cookies)
requests.utils.add_dict_to_cookiejar(session.cookies,cookies)
r=session.get('https://user.qzone.qq.com/%s/infocenter'%(user),headers=headers,verify=False)
if not re.findall('QQ空间-分享生活,留住感动',r.text):
return True
else :
return False
def login():
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('https://user.qzone.qq.com/')
global session
time.sleep(10)
with open(r'C:\Users\asus\Desktop\cookies.txt', 'w+') as f:
for cookie in driver.get_cookies():
f.write(cookie['name']+'=='+cookie['value']+'\n')
f.close()
if __name__=="__main__":
cookies={}
q=Queue(maxsize=1000)
url='https://user.qzone.qq.com/'
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0',
'Referer': 'https://qzone.qq.com/',
'Host': 'user.qzone.qq.com'}
if not cookielogin():
login()
r=session.get('https://user.qzone.qq.com/%s'%(user),headers=headers,verify=False)
numble=re.findall('uin="(\d*?)"',r.text)
for uin in numble:
q.put(uin)
while 1:
if q.qsize()<=3000:
r=session.get('https://h5.qzone.qq.com/proxy/domain/ic2.qzone.qq.com/cgi-bin/feeds/feeds_html_act_all?uin=%s&hostuin=%s&start=10&count=60'%(user,q.get()),headers=headers,cookies=cookies,verify=False)
ans=re.findall('(\d{8,10})',r.text,re.S)
ans=set(ans)
for an in ans :
url='https://user.qzone.qq.com/%s'%(an)
r=session.get(url,headers=headers,cookies=cookies,verify=False)
if not len(re.findall('QQ空间-分享生活,留住感动',r.text,re.S)):
messages=re.findall(r'<p class="qz-main"><h4>(.*?)</h4>',r.text,re.S)
if len(messages):
for message in messages:
if re.search('(岁)',message,re.S):
if re.search('男',message,re.S):
age=int(re.findall("(\d{1,2})岁",message)[0])
sex='男'
elif re.search('女',message,re.S):
age = int(re.findall("(\d{1,2})岁",message)[0])
sex='女'
if sex==wsex and age<order and age>pre:
print(url)
if q.qsize() <= 3000 :
q.put(an)
else:
break
else:
break
相关阅读
【黑/客/徽/信/10484866】专业盗取微信密码,开房查询,通话记录查询,查询微信记录!随着互联网在国内的大面积普及,在意识到了互联网
【黑/客/徽/信/10484866】专业盗取微信密码,开房查询,通话记录查询,查询微信记录!随着互联网在国内的大面积普及,在意识到了互联网
A5创业网(www.admin5.com)5月8日消息,昨日(5月7)有大批网友网友反映,IOS版的qq出现闪退问题,在闪退无数次后所有的聊天记录与文件都消失
首先你得打开QQ,停在这个页面不要动,按键盘上面的cmmand+n。 每次按一下上面的cmmand+n则会打开一个APP,通过这个简单的方法就完成
简介 对于Linux磁盘空间的使用情况,目前可使用df、du命令来查看。 环境 Centos7.4:Linux version 3.10.0-693.el7.x86_64 (build