升级代码,升级了一次代码升级后不需要进行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 Trueelse :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:breakelse:break

运行过程:

完整代码:

import requests
import reimport time
import urllib3
from queue import Queue
urllib3.disable_warnings()
session =requests.session()
user=input('输入登录的qq号:')
def cookielogin():global sessionheaders = {'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 Trueelse :return Falsedef login():from selenium import webdriverdriver = webdriver.Firefox()driver.get('https://user.qzone.qq.com/')global sessiontime.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:breakelse: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 sessionheaders = {'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 Trueelse :return Falsedef login():from selenium import webdriverdriver = webdriver.Firefox()driver.get('https://user.qzone.qq.com/')global sessiontime.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'<div 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:breakelse:break

qq空间登录(采用cookie纪录+广度搜索BFS)相关推荐

  1. Java程序模拟QQ空间登录 - 并模拟刷说说的赞(图文) 注意:腾讯修改了加密算法,已失效(2015-01-31)

    Java程序模拟QQ空间登录 - 并模拟刷说说的赞 背景:在2013-10-25的一天,有个friend在QQ问我:"post登陆QQ空间抓取不到post的数据".于是故事就开始了 ...

  2. 仿QQ空间登录,解决键盘挡住输入框的问题

    我们在开发Android应用中,登录和注册界面是少不了的,往往在做登录注册的时候如果给界面加一个LOGO,就有可能把用户名和密码框放在手机屏幕的中间或底部,这样当软键盘弹出的时候,就有可能挡住输入框( ...

  3. selenium进行QQ空间登录

    一.selenium简要说明 selenium是基于浏览器自动化的一个模块,它能便捷的获取网站中动态加载的数据,和实现模拟登录.爬虫等操作 二.实现流程 2.1 selenium前置操作 1. 安装s ...

  4. python模拟qq空间登录_模拟登录系列 | QQ空间模拟登录

    原文链接模拟登录系列 | QQ空间模拟登录​mp.weixin.qq.com 本系列所有代码均在这CharlesPikachu/DecryptLogin​github.com 原理简介 这里,我们简单 ...

  5. 用html写一个QQ空间登录页面

    这是一个基本的 QQ 空间登录页面的 HTML 代码: <!DOCTYPE html> <html> <head><meta charset="ut ...

  6. ios 仿电脑qq登录界面_iOS开发UI篇—模仿ipad版QQ空间登录界面

    iOS开发UI篇-模仿ipad版QQ空间登录界面 一.实现和步骤 1.一般ipad项目在命名的时候可以加一个HD,标明为高清版 2.设置项目的文件结构,分为home和login两个部分 3.登陆界面的 ...

  7. 【算法】深度搜索(DFS) 和 广度搜索(BFS)

    深度搜索(DFS) 点:然后退回到该顶点,搜索其它路径,直到以该顶点为始点的所有路径的顶点都被访问,深度搜索算法是递归算法,因为对于没一个节点来说,执行的是同样的操作.  简单来说,深度搜素算法就是一 ...

  8. python爬虫(十四)selenium(select、17素材网、模拟登录豆瓣和QQ空间、获取cookie、行为链)

    selenium介绍(下) 不管页面是动态加载还是静态加载出来的,只要是elements中能找到的,都能用selenium来获取数据,selenium获取数据的方式是以页面最终渲染后的前端为基础的,不 ...

  9. python模拟qq空间登录_模拟登录QQ空间

    # coding=utf-8 from selenium import webdriver # 模拟登录QQ空间 def Start_Login(): # 这个是chormedriver的地址 dri ...

  10. python qq空间登录_模拟登录QQ空间

    # coding=utf-8 from selenium import webdriver # 模拟登录QQ空间 def Start_Login(): # 这个是chormedriver的地址 dri ...

最新文章

  1. LeetCode 804 Unique Morse Code Words--python,java解法
  2. HDU - 6438(贪心+思维)
  3. mysql编写中文时变成问号解决方法
  4. java arraylist 函数_Java Extend ArrayList函数
  5. None用法+连接字符串优先使用join +用format而不是%+区别可变对象和不可变对象(list的深拷贝和浅拷贝)
  6. ios CGRec用法
  7. java jsonalias_将多个JSON字段映射到单个Java字段
  8. sixxpack破解的文章!【转】
  9. php面向对象异常处理,PHP 错误和异常处理(下)
  10. mysql的启动 两种方式
  11. 管理后台--4,删除分类
  12. uV胶点胶机器人_解析手机用粘合剂十大用胶点
  13. Posta:跨文档信息安全搜索工具
  14. K歌、短视频技术最佳实践——“唱吧”音视频技术探索
  15. 大众点评美食评论爬虫
  16. 梅特勒托利多xk3124电子秤说明书_托利多电子秤详细说明书
  17. 常用二极管IN4148和单片机驱动的一些关系
  18. iPhone 手机存储空间没有了
  19. 7-4 身份证号码最后一位 (100分)
  20. PS学习笔记(05)

热门文章

  1. @OneToMany mappedBy
  2. IDEA2019版下载和安装
  3. 【Vue使用高德API制作热力图】
  4. 小程序授权登录并获取手机号
  5. cad图形如何导入到奥维地图_CAD图导入奥维简易操作步骤--陈浩
  6. c语言头文件下载微盘,c语言头文件下载 C语言头文件大全.doc
  7. (附源码)Springboot通用办事流程管理软件 毕业设计 211819
  8. Excel 公式学习笔记:数组用法
  9. 前端开发专业实习报告
  10. 怎么选择论文查重软件?