爱收集资源网

授人以渔:本地扫码登陆获取Session的QQ音乐爬虫实战教程

爱收集资源网 2025-02-11 06:12

现在网络环境中,爬虫技术大大方便了数据的搜集。特别是那些能本地扫码登录并获取会话的爬虫,实用性非常强。这次,我们就来尝试将QQ音乐扫码登录功能转移到本地操作。

import sysimport os import subprocess'''用于在不同OS显示验证码'''def showImage(img_path):    try:        if sys.platform.find('darwin') >= 0: subprocess.call(['open', img_path])        elif sys.platform.find('linux') >= 0: subprocess.call(['xdg-open', img_path])        else: os.startfile(img_path)    except:        from PIL import Image        img = Image.open(img_path)        img.show()        img.close()
'''验证码验证完毕后关闭验证码并移除'''def removeImage(img_path):    if sys.platform.find('darwin') >= 0:        os.system("osascript -e 'quit app \"Preview\"'")    os.remove(img_path)
'''保存验证码图像'''def saveImage(img, img_path):    if os.path.isfile(img_path):        os.remove(img_path)    fp = open(img_path, 'wb')    fp.write(img)    fp.close()

目标设定

我们的主要任务是确保QQ音乐支持本地扫码登录。具体操作是将登录二维码保存在本地并展示给用户。一旦用户成功扫码登录,系统将自动删除该二维码,并保存登录数据。这样的设计便于后续爬虫对QQ音乐数据的采集与处理。

准备工作

qq空间说说赞真人点赞_如何买qq说说赞_免费刷赞qq说说赞网址

我们需要访问QQ音乐官网,然后点击F12键激活开发者模式。在此模式下,点击登录按钮,会出现登录界面。这一环节至关重要,它为接下来的操作奠定了基础。借助开发者模式,我们可以深入了解网页背后的数据交互过程。

## 伪代码self.cur_path = os.getcwd()params = {    'appid''716027609',     'e''2',     'l''M',     's''3',     'd''72',     'v''4',     't': str(random.random()),     'daid''383',  'pt_3rd_aid''100497308',}response = self.session.get(self.ptqrshow_url, params=params)saveImage(response.content, os.path.join(self.cur_path, 'qrcode.jpg'))showImage(os.path.join(self.cur_path, 'qrcode.jpg'))

获取二维码信息

获取图片信息非常重要。在开发者工具里,点击Img选项并向下滚动,就能看到二维码的网页链接。点击Headers,可以看到获取图片所需的链接,并研究二维码网站所需的参数。我们发现只有t参数在变动。为了验证这个参数,我们使用了postman工具,创建了一个新的请求查询,填入url和params,成功获取了二维码。因此,我们暂时认为t参数不是加密参数,可以将其视为0到1之间的随机数进行输入。

监控数据包状态

为了减少抓取的数据包数量,我们先将之前捕获的包删除,然后返回到全部界面。在点击登录进行页面跳转时,必须注意数据包的当前状态。因为登录后会有302跳转,若不及时停止抓包,后续的数据包就会被清空。经过多次访问网页,我们观察到ptqrtoken、action、login_sig这几个参数是可以变化的。

查找加密参数位置

免费刷赞qq说说赞网址_如何买qq说说赞_qq空间说说赞真人点赞

我们根据字符串的长度和以16开头的特性,推测action变量中的第三位可能是时间戳的整数倍。于是,我们随机访问了一个时间戳网页,将action变量输入其中,结果发现其数值扩大了一千倍。然后,我们打开了开发者工具,打算寻找加密参数所在的位置。在Initiator标签页中,我们找到了各个参数的来源,并直接点击了第一个loadScript。为了进一步分析,我们又打开了一个在线代码格式化工具,将代码格式化后,在线查询了加密参数的加密方法。最终,我们得知这两个加密参数都与cookie的加密机制相关。

params.ptqrtoken=$.str.hash33($.cookie.get("qrsig"))pt.ptui.login_sig=pt.ptui.login_sig||$.cookie.get("pt_login_sig");

获取并处理加密参数

找到了加密信息所在,便着手寻找cookie。这两个参数的潜在位置有限,无需逐一检查每个返回结果。刷新页面后,发现弹出登录框的返回信息,这是一次GET请求,URL与之前查询的一致。为确保安全,我们反复刷新,确认没有其他加密参数,庆幸它们都是常规固定参数,可以直接访问。操作完成后,我们成功找到了pt_login_sig参数,使用字典工具获取并保存了这个参数。第一个参数在登录框内已定位,据此推断第二个参数qrsig可能隐藏在二维码中。果不其然,我们轻松地从二维码信息中,通过字典的get方法提取出了所需的值。然而,获取到的加密参数不能直接使用,还需获取其hash33加密后的内容。点击Search后搜索hash33,只出现一条信息,点击进入查看相关代码。

在尝试实现这种基于本地扫码的登录爬虫过程中,大家是否遇到过特别难以解决的参数处理难题?若觉得这篇文章对您有所帮助,请记得点赞并转发!

如何买qq说说赞