省内注销二建 建设部网站更新慢,网站建设策划需要涉及,通信工程企业网站建设,胖子马wordpress模板:q8免费版升级代码#xff0c;升级了一次代码升级后不需要进行selenium库的安装#xff0c;只需要安装requests库即可。
网址https://blog.csdn.net/qq_41861526/article/details/80946702
目的#xff1a;这个小项目的目的#xff0c;是获取有哪些陌生人的qq空间可以访问#xf…升级代码升级了一次代码升级后不需要进行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(rC:\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(rC:\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.comrequests.utils.add_dict_to_cookiejar(session.cookies,cookies)#这里就是将cookie和session绑定在一起rsession.get(https://user.qzone.qq.com/1694851090/infocenter,headersheaders,verifyFalse)#if not re.findall(QQ空间-分享生活留住感动,r.text):#判断是否有这个来判断是否登录成功return Trueelse :return False
登录成功的话返回True,否则返回False
2、获取没被拒绝的qq空间的号码
我这里首先是在自己的qq空间获取一些qq的号码然后再在这些qq号码里面去获取其他qq。再去访问这些号码还是根据title标签判断自己是否被访问拒绝。
我们根据titleQQ空间-分享生活留住感动/title这里来判断是否被拒绝。
我们这里采用了广度搜索的形式来进行扩展好友搜索。我这里采用队列的形式及先进先出否则和你关系近的反而是最后访问这样明显不可取。我这里设置了当采集了1000个的时候会自动退出来。python如何实现广搜在我的这篇文章里面有提到
现在放代码
rsession.get(https://user.qzone.qq.com/%s%(user),headersheaders,verifyFalse)numblere.findall(uin(\d*?),r.text)#查找自己qq空间里面的好友获取的是点赞的因为点赞的话说明这个人比较活跃在qq玩的比较多for uin in numble:q.put(uin)#将获取到的qq加入队列while 1:if q.qsize()1000:rsession.get(https://h5.qzone.qq.com/proxy/domain/ic2.qzone.qq.com/cgi-bin/feeds/feeds_html_act_all?uin%shostuin%sstart10count60%(user,q.get()),headersheaders,cookiescookies,verifyFalse)ansre.findall((\d{8,10}),r.text,re.S)#获取他人qq空间里面的好友ansset(ans)for an in ans :urlhttps://user.qzone.qq.com/%s%(an)rsession.get(url,headersheaders,cookiescookies,verifyFalse)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()
userinput(输入登录的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(rC:\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.comprint(cookies)requests.utils.add_dict_to_cookiejar(session.cookies,cookies)rsession.get(https://user.qzone.qq.com/%s/infocenter%(user),headersheaders,verifyFalse)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(rC:\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{}qQueue(maxsize1000)urlhttps://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()rsession.get(https://user.qzone.qq.com/%s%(user),headersheaders,verifyFalse)numblere.findall(uin(\d*?),r.text)for uin in numble:q.put(uin)while 1:if q.qsize()1000:rsession.get(https://h5.qzone.qq.com/proxy/domain/ic2.qzone.qq.com/cgi-bin/feeds/feeds_html_act_all?uin%shostuin%sstart10count60%(user,q.get()),headersheaders,cookiescookies,verifyFalse)ansre.findall((\d{8,10}),r.text,re.S)ansset(ans)for an in ans :urlhttps://user.qzone.qq.com/%s%(an)rsession.get(url,headersheaders,cookiescookies,verifyFalse)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()
userinput(输入你要登录的qq号)
wsexinput(你想要的qq空间主人的性别)
preint(input(qq空间的主人最小几岁))
orderint(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(rC:\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.comprint(cookies)requests.utils.add_dict_to_cookiejar(session.cookies,cookies)rsession.get(https://user.qzone.qq.com/%s/infocenter%(user),headersheaders,verifyFalse)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(rC:\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{}qQueue(maxsize1000)urlhttps://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()rsession.get(https://user.qzone.qq.com/%s%(user),headersheaders,verifyFalse)numblere.findall(uin(\d*?),r.text)for uin in numble:q.put(uin)while 1:if q.qsize()3000:rsession.get(https://h5.qzone.qq.com/proxy/domain/ic2.qzone.qq.com/cgi-bin/feeds/feeds_html_act_all?uin%shostuin%sstart10count60%(user,q.get()),headersheaders,cookiescookies,verifyFalse)ansre.findall((\d{8,10}),r.text,re.S)ansset(ans)for an in ans :urlhttps://user.qzone.qq.com/%s%(an)rsession.get(url,headersheaders,cookiescookies,verifyFalse)if not len(re.findall(QQ空间-分享生活留住感动,r.text,re.S)):messagesre.findall(rdiv classqz-mainh4(.*?)/h4,r.text,re.S)if len(messages):for message in messages:if re.search((岁),message,re.S):if re.search(男,message,re.S):ageint(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 sexwsex and ageorder and agepre:print(url)if q.qsize() 3000 :q.put(an)else:breakelse:break