上分宝:值得大家信赖的下载网站!

所在位置:首页 > 攻略资讯 > qq空间网页版,qq空间网页版

qq空间网页版,qq空间网页版

时间:2023-04-10 08:13:20来源:互联网

网上有很多关于qq空间网页版,qq空间网页版的知识,也有很多人为大家解答关于qq空间网页的问题,今天上分宝游戏网为大家整理了关于这方面的知识,让我们一起来看下吧!

本文目录一览:

1、qq空间网页

2、申请关闭QQ空间网页

3、qq空间怎么看网页版

4、如何用手机登录网页版的QQ空间?

qq空间网页

分析QQ空间

登录QQ空间

爬取第一步,分析站点,首先需要知道如何登录QQ空间。最初想法是用requests库配置登录请求,模拟登录,但是不久便放弃了这一思路,请看下图↓

login

根据登录按钮绑定的监听事件可以追踪到该按钮的点击事件如下:

login function

账号加密是必然的,但这一堆堆的代码真心不好解析,有耐心的勇士尽情一试!

在排除这种登录方法后,选择selenium模拟用户登录不失为省时省力的方法,而且我们只是需要通过selenium完成登录,获取到cookies和后面讲述的g_tk参数后,就可以停用了,所以效率并不太低。

分析空间相册

登录以后,页面会跳转至 [https://img.shangfenbao.com/news/2023/04/10/vlpnrp04kua 这时把鼠标移到导航栏你会发现,所有的导航栏链接都是javascript:; 。没错就是这么坑,一切都是暗箱操作。

当然这并不难处理,使用调试工具捕获点击后产生的请求,然后过滤出正确的请求包即可。因为网络包非常多,那么怎么过滤呢,猜想相册数据的API必然会返回个列表list,尝试过滤list然后逐个排除,最后定位到请求包。下面是通过fcg_list过滤后的数据包,列表信息以jsonp格式返回,稍作处理即可当做json格式来读取(后面有讲)。

album list

从Headers和Response可以分别获取到两组重要信息:

request 获取相册列表所需的请求信息,包括请求链接和参数response 数据包包含的所有相册的信息,是每个相册所含照片对应的请求包参数的数据来源

先看请求包:

# urlhttps://img.shangfenbao.com/news/2023/04/10/ontcmjwzttk argsg_tk: 477819917callback: shine0_Callbackt: 691481346hostUin: 123456789uin: 123456789appid: 4inCharset: utf-8outCharset: utf-8source: qzoneplat: qzoneformat: jsonpnotice: 0filter: 1handset: 4pageNumModeSort: 40pageNumModeClass: 15needUserInfo: 1idcNum: 4callbackFun: shine0_: 1551788226819

其中hostUin, uin都是QQ号,g_tk是必须的且每次重新登录都会更新(后面有讲如何获取),其它有些参数不是必须的,我尝试后整理出如下请求参数:

query = { \'g_tk\': self.g_tk, \'hostUin\': self.username, \'uin\': self.username, \'appid\': 4, \'inCharset\': \'utf-8\', \'outCharset\': \'utf-8\', \'source\': \'qzone\', \'plat\': \'qzone\', \'format\': \'jsonp\'}

接下来看jsonp格式的跨域响应包:

shine0_Callback({ "code":0, "subcode":0, "message":"", "default":0, "data":{ "albumListModeSort" : [ { "allowAccess" : 1, "anonymity" : 0, "bitmap" : "10000000", "classid" : 106, "comment" : 11, "createtime" : 1402661881, "desc" : "", "handset" : 0, "id" : "V13LmPKk0JLNRY", "lastuploadtime" : 1402662103, "modifytime" : 1408271987, "name" : "毕业季", "order" : 0, "pre" : "http:\\/\\/b171.photo.store.qq.com\\/psb?\\/V13LmPKk0JLNRY\\/eSAslg*mYWaytEtLysg*Q*5Km91gIWfGuwSk58K2rQY!\\/a\\/dIY29GUbJgAA", "priv" : 1, "pypriv" : 1, "total" : 4, "viewtype" : 0 },

shine0_Callback是请求包的callbackFun参数决定的,如果没这个参数,响应包会以_Callback作为默认名,当然这都不重要。所有相册信息以json格式存入albumListModeSort中,上面仅截取了一个相册的信息。

相册信息中,name代表相册名称,id作为唯一标识可用于请求该相册内的照片信息,而pre仅仅是一个预览缩略图的链接,无关紧要。

分析单个相册

与获取相册信息类似,进入某一相册,使用cgi_list过滤数据包,找到该相册的照片信息

photo list

同样的道理,根据数据包可以获取照片列表信息的请求包和响应信息,先看请求:

# urlhttps://img.shangfenbao.com/news/2023/04/10/2ypqtyhp43m argsg_tk: 477819917callback: shine0_Callbackt: 952444063mode: 0idcNum: 4hostUin: 123456789topicId: V13LmPKk0JLNRYnoTopic: 0uin: 123456789pageStart: 0pageNum: 30skipCmtCount: 0singleurl: 1batchId: notice: 0appid: 4inCharset: utf-8outCharset: utf-8source: qzoneplat: qzoneoutstyle: jsonformat: jsonpjson_esc: 1question: answer: callbackFun: shine0_: 1551790719497

其中有几个关键参数:

g_tk - 与相册列表参数一致topicId - 与相册列表参数中的id一致pageStart - 本次请求照片的起始编号pageNum - 本次请求的照片数量

为了一次性获取所有照片,可以将pageStart设为0,pageNum设为所有相册所含照片的最大值。

同样可以对上面的参数进行简化,在相册列表请求参数的基础上添加topicId,pageStart和pageNum三个参数即可。

下面来看返回的照片列表信息:

shine0_Callback({ "code":0, "subcode":0, "message":"", "default":0, "data":{ "limit" : 0, "photoList" : [ { "batchId" : "1402662093402000", "browser" : 0, "cameratype" : " ", "cp_flag" : false, "cp_x" : 455, "cp_y" : 388, "desc" : "", "exif" : { "exposureCompensation" : "", "exposureMode" : "", "exposureProgram" : "", "exposureTime" : "", "flash" : "", "fnumber" : "", "focalLength" : "", "iso" : "", "lensModel" : "", "make" : "", "meteringMode" : "", "model" : "", "originalTime" : "" }, "forum" : 0, "frameno" : 0, "height" : 621, "id" : 0, "is_video" : false, "is_weixin_mode" : 0, "ismultiup" : 0, "lloc" : "NDN0sggyKs3smlOg6eYghjb0ZRsmAAA!", "modifytime" : 1402661792, "name" : "QQ图片20140612104616", "origin" : 0, "origin_upload" : 0, "origin_url" : "", "owner" : "123456789", "ownername" : "123456789", "photocubage" : 91602, "phototype" : 1, "picmark_flag" : 0, "picrefer" : 1, "platformId" : 0, "platformSubId" : 0, "poiName" : "", "pre" : "http:\\/\\/b171.photo.store.qq.com\\/psb?\\/V13LmPKk0JLNRY\\/eSAslg*mYWaytEtLysg*Q*5Km91gIWfSk58K2rQY!\\/a\\/dIY29GUbJgAA&bo=pANtAgAAAAABCeY!", "raw" : "http:\\/\\/r.photo.store.qq.com\\/psb?\\/V13LmPKk0JLNRY\\/eSAslg*mYWaytEtLysg*Q*5Km91gIWfSk58K2rQY!\\/r\\/dIY29GUbJgAA", "raw_upload" : 1, "rawshoottime" : 0, "shoottime" : 0, "shorturl" : "", "sloc" : "NDN0sggyKs3smlOg6eYghjb0ZRsmAAA!", "tag" : "", "uploadtime" : "2014-06-13 20:21:33", "url" : "http:\\/\\/b171.photo.store.qq.com\\/psb?\\/V13LmPKk0JLNRY\\/eSAslg*mYWaytEtLysg*Q*5Km91gIWfSk58K2rQY!\\/b\\/dIY29GUbJgAA&bo=pANtAgAAAAABCeY!", "width="540px",height="auto" />

返回的照片信息都存于photoList, 上面同样只截取了一张照片的信息,后面一部分返回的是当前相册的一些基本信息。totalInAlbum, totalInPage存储了当前相册总共包含的照片数及本次返回的照片数。而我们需要下载的图片链接则是url!

OK, 到此,所有请求和响应数据都分析清楚了,接下来便是coding的时候了。

确定爬取方案

创建qqzone类,初始化用户信息使用Selenium模拟登录获取Cookies和g_tk使用requests获取相册列表信息遍历相册,获取照片列表信息并下载照片

创建qqzone类

class qqzone(object): """QQ空间相册爬虫""" def __init__(self, user): self.username = user[\'username\'] self.password = user[\'password\']

模拟登录

from selenium import webdriverfrom selenium.webdriver.common.keys import Keysfrom selenium.common.exceptions import WebDriverExceptio# ...def _login_and_get_args(self): """登录QQ,获取Cookies和g_tk""" opt = webdriver.ChromeOptions() opt.set_headless() driver = webdriver.Chrome(chrome_options=opt) driver.get(\'https://img.shangfenbao.com/news/2023/04/10/1rggao1y1ky # time.sleep(2) logging.info(\'User {} login...\'.format(self.username)) driver.switch_to.frame(\'login_frame\') driver.find_element_by_id(\'switcher_plogin\').click() driver.find_element_by_id(\'u\').clear() driver.find_element_by_id(\'u\').send_keys(self.username) driver.find_element_by_id(\'p\').clear() driver.find_element_by_id(\'p\').send_keys(self.password) driver.find_element_by_id(\'login_button\').click() time.sleep(1) driver.get(\'https://img.shangfenbao.com/news/2023/04/10/32calgleaue Cookies

使用selenium获取Cookies非常方便

self.cookies = driver.get_cookies()

获取 g_tk

获取g_tk最开始可以说是本爬虫最大的难点,因为从网页中根本找不到直接写明的数值,只有各种函数调用。为此我全局搜索,发现好多地方都有其获取方式。

g_tk

最后选择了其中一处,通过selenium执行脚本的功能成功获取到了g_tk!

self.g_tk = driver.execute_script(\'return QZONE.FP.getACSRFToken()\')

到此,selenium的使命就完成了,剩下的将通过requests来完成。

初始化 request.session

接下来需要逐步生成请求然后获取数据。但是为方便起见,这里使用会话的方式请求数据,配置好cookie和headers,省的每次请求都设置一遍。

def _init_session(self): self.session = requests.Session() for cookie in self.cookies: self.session.cookies.set(cookie[\'name\'], cookie[\'value\']) self.session.headers = { \'Referer\': \'https://img.shangfenbao.com/news/2023/04/10/y0jpndz1nlh.html \'User-Agent\': \'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36\' }

请求相册信息

获取相册信息,需要先封装好请求参数,然后通过session.get爬取数据,再通过正则匹配以json格式读取jsonp数据,最后解析所需的name和id。

def _get_ablum_list(self): """获取相册的列表信息""" album_url = \'{}{}\'.format( \'https://img.shangfenbao.com/news/2023/04/10/bqon30hbauc self._get_query_for_request()) logging.info(\'Getting ablum list id...\') resp = self.session.get(album_url) data = self._load_callback_data(resp) album_list = {} for item in data[\'data\'][\'albumListModeSort\']: album_list[item[\'name\']] = item[\'id\'] return album_list

其中的参数组合来自下面的函数_get_query_for_request函数。

def _get_query_for_request(self, topicId=None, pageStart=0, pageNum=100): """获取请求相册信息或照片信息所需的参数 Args: topicId: 每个相册对应的唯一标识符 pageStart: 请求某个相册的照片列表信息所需的起始页码 pageNum: 单次请求某个相册的照片数量 Returns: 一个组合好所有请求参数的字符串 """ query = { \'g_tk\': self.g_tk, \'hostUin\': self.username, \'uin\': self.username, \'appid\': 4, \'inCharset\': \'utf-8\', \'outCharset\': \'utf-8\', \'source\': \'qzone\', \'plat\': \'qzone\', \'format\': \'jsonp\' } if topicId: query[\'topicId\'] = topicId query[\'pageStart\'] = pageStart query[\'pageNum\'] = pageNum return \'&\'.join(\'{}={}\'.format(key, val) for key, val in query.items())

其中的jsonp解析函数如下,主体部分就是一个正则匹配,非常简单。

def _load_callback_data(self, resp): """以json格式解析返回的jsonp数据""" try: resp.encoding = \'utf-8\' data = loads(re.search(r\'.*?\\(({.*}).*?\\).*\', resp.text, re.S)[1]) return data except ValueError: logging.error(\'Invalid input\')

解析并下载照片

获取相册列表后,逐个请求照片列表信息,进而逐一下载

def _get_photo(self, album_name, album_id): """获取单个相册的照片列表信息,并下载该相册所有照片""" photo_list_url = \'{}{}\'.format( \'https://img.shangfenbao.com/news/2023/04/10/ugegnvcodgr self._get_query_for_request(topicId=album_id)) logging.info(\'Getting photo list for album {}...\'.format(album_name)) resp = self.session.get(photo_list_url) data = self._load_callback_data(resp) if data[\'data\'][\'totalInPage\'] == 0: return None file_dir = self.get_path(album_name) for item in data[\'data\'][\'photoList\']: path = \'{}/{}.jpg\'.format(file_dir, item[\'name\']) logging.info(\'Downloading {}-{}\'.format(album_name, item[\'name\'])) self._download_image(item[\'url\'], path)

下载图片也是通过request,记得设置超时时间。

def _download_image(self, url, path): """下载单张照片""" try: resp = self.session.get(url, timeout=15) if resp.status_code == 200: open(path, \'wb\').write(resp.content) except requests.exceptions.Timeout: logging.warning(\'get {} timeout\'.format(url)) except requests.exceptions.ConnectionError as e: logging.error(e.__str__) finally: pass

爬取测试

爬取过程

capturing

爬取结果

downloaded photos

写在最后

如果将请求参数中的format由jsonp改成json,则可以直接获取json数据本用例并未使用多进程或多线程,所以速率不算快,还有待优化的地方

申请关闭QQ空间网页的方法步骤:

1、点击官方链接,进入官方关闭QQ空间的界面;

2、按照界面要求输入QQ号和密码并点击登陆;

3、在QQ空间关闭申请中填写相关选项后输入验证码;

4、点击提交关闭申请。

注意:关闭以后,所有数据将清空,重新打开时,所有日志、模块、音乐、图片都会清除,请慎重考虑。

qq空间怎么看网页版

qq空间看网页版步骤。

1、打开浏览器在电脑桌面上找到浏览器图标并打开浏览器。

2、搜索在搜索框内输入qq空间并点击搜索的图标。

3、进入官网点击官网网站念族悔链仔正接即可进入网页。

4、输穗闹入QQ帐号和密码,再点击登录即可进入网页版qq空间。

如何用手机登录网页版的QQ空间?

用手机登录网页版的QQ空间的具体步骤如下:我们需要准备的材料有:手机、浏览器。

1、首先我们打开浏览器,点击搜索“QQ空间”进入。

2、之后我们在该页面中点击打开“快速安全登录”页面。

3、最后登陆进去后我们就可以从手机直接进入网页版qq空间里了。

以上就是关于qq空间网页版,qq空间网页版的知识,后面我们会继续为大家整理关于qq空间网页的知识,希望能够帮助到大家!

  • 热门资讯
  • 最新资讯
  • 手游排行榜
  • 手游新品榜
  • 软件排行榜
  • 软件新品榜