使用Python爬取微信群里的百度云资源-程序员宅基地

技术标签: 经验分享  恰饭  python  编程语言  程序人生  

需求背景:
最近误入一个免费(daoban)资源的分享群(正经脸),群里每天都在刷资源链接。但是大家都知道,百度云的分享链接是很容易被河蟹的,群里除了分享链接外,就是各种抱怨 “怎么又失效了”,“又河蟹了…”。本着学习技术的初心,于是我就开始研究怎样自动爬取微信群的消息并自动转存到自己的云盘。

在这里插入图片描述

需求:

(1),爬取微信群里的百度云分享链接

(2),将资源转存到自己的网盘

涉及

(1),正则表达式

(2),如何分析cookieapi

(3),selenium(webdriver)

本篇文章目录

(1),爬取微信群聊信息里的网盘资源

(2),寻找并分析百度云的转存api

(3),爬取shareid、from、filelist,发送请求转存到网盘

(4),完整代码

(5),参考

爬取微信群聊信息里的网盘资源
爬取微信群聊信息可以用微信网页版的api,这里推荐一个高度封装,使用简单的工具:wxpy: 用 Python 玩微信

在这里插入图片描述

这是个不错的工具,可以实现网页版微信的所有功能,之前博主利用它还实现了机器人聊天功能,自己的个人账号华丽转变 微软小冰 。虽然微软还没有公开小冰的 api ,不过我们完全可以利用这个工具的转发功能来实现,思路很简单,微信上领养一个小冰,把别人说的话转发给小冰,再把小冰说的话转发回去。

在这里插入图片描述

扯远了,总之利用这个工具,就可以对微信群聊里的信息进行监听,接着就是利用正则表达式把网盘链接抓取出来。具体的代码我就不贴了,使用起来很简单。

寻找并分析百度云的转存api

这个部分才是我们的重点,首先你得有一个百度云盘的账号,然后登录,用浏览器(这里用火狐浏览器做示范)打开一个分享链接。F12打开控制台进行抓包。手动进行转存操作:全选文件->保存到网盘->选择路径->确定。点击【确定】前建议先清空一下抓包记录,这样可以精确定位到转存的api,这就是我们中学时学到的【控制变量法】2333。

在这里插入图片描述

可以看到上图中抓到了一个带有 “transfer” 单词的 post请求,这就是我们要找的转存(transferapi 。接下来很关键,就是分析它的请求头和请求参数,以便用代码模拟。
https://pan.baidu.com/share/transfer?shareid=3927175953&from=140959320&ondup=newcopy&async=1&bdstoken=xxx&channel=chunlei&clienttype=0&web=1&app_id=250528&logid=xxx
点击它,再点击右边的【Cookies】就可以看到请求头里的cookie 情况。

在这里插入图片描述

cookie分析

因为转存是登录后的操作,所以需要模拟登录状态,将与登录有关的cookie 设置在请求头里。我们继续使用【控制变量法】,先将浏览器里关于百度的 cookie 全部删除(在右上角的设置里面,点击【隐私】,移除cookies。具体做法自己百度吧。)

然后登录,右上角进入浏览器设置->隐私->移除cookie,搜索 “bai” 观察cookie 。这是所有跟百度相关的cookie ,一个个删除,删一个刷新一次百度的页面,直到删除了 BDUSS ,刷新后登录退出了,所以得出结论,它就是与登录状态有关的 cookie

同理,删除掉 STOKEN 后,进行转存操作会提示重新登录。所以,这两个就是转存操作所必须带上的cookie

弄清楚了 cookie 的情况,可以像下面这样构造请求头。

def __init__(self,bduss,stoken,bdstoken):
        self.bdstoken = bdstoken
        self.headers = {
   
    
            'Accept': '*/*',
            'Accept-Encoding': 'gzip, deflate, br',
            'Accept-Language': 'zh-CN,zh;q=0.8',
            'Connection': 'keep-alive',
            'Content-Length': '161',
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
            'Cookie': 'BDUSS=%s;STOKEN=%s;' % (bduss, stoken),
            'Host': 'pan.baidu.com',
            'Origin': 'https://pan.baidu.com',
            'Referer': 'https://pan.baidu.com/s/1dFKSuRn?errno=0&errmsg=Auth%20Login%20Sucess&&bduss=&ssnerror=0',           
            'User-Agent': self.pro.get_user_agent(),# 作为应对反爬虫机制的策略,这是博主写的一个随机抽取user_agent的方法,你也可以自己到网上去搜集一些,写一个随机方法。
            'X-Requested-With': 'XMLHttpRequest',
        }

除了上面说到的两个 cookie ,其他的请求头参数可以参照手动转存时抓包的请求头。这两个 cookie预留出来做参数的原因是cookie 都是有生存周期的,过期了需要更新,不同的账号登录也有不同的cookie

参数分析:

接下来分析参数,点击【Cookies】右边的【Params】查看参数情况。如下:

在这里插入图片描述

上面的query string(也就是?后跟的参数)里,除了框起来的shareid、from、bdstoken需要我们填写以外,其他的都可以不变,模拟请求的时候直接抄下来。

前两个与分享的资源有关,bdstoken与登录的账号有关。下面的form data里的两个参数分别是资源在分享用户的网盘的所在目录和刚刚我们点击保存指定的目录。

所以,需要我们另外填写的参数为:shareid、from、bdstoken、filelist 和 path,bdstoken 可以手动转存抓包找到,path根据你的需要自己定义,前提是你的网盘里有这个路径。其他三个需要从分享链接里爬取,这个将在后面的【爬取shareid、from、filelist,发送请求转存到网盘】部分中进行讲解。

码字不易废话两句:有需要学习资料的或者有技术问题交流“点击”即可

搞清楚了参数的问题,可以像下面这样构造转存请求的 url

def transfer(self,share_id,uk,filelist_str,path_t_save):# 需要填写的参数,分别对应上图的shareid、from、filelist 和 path
        # 通用参数
        ondup = "newcopy"
        async = "1"
        channel = "chunlei"
        clienttype = "0"
        web = "1"
        app_id = "250528"
        logid = "你的logid"

        url_trans = "https://pan.baidu.com/share/transfer?shareid=%s" \
                    "&from=%s" \
                    "&ondup=%s" \
                    "&async=%s" \
                    "&bdstoken=%s" \
                    "&channel=%s" \
                    "&clienttype=%s" \
                    "&web=%s" \
                    "&app_id=%s" \
                    "&logid=%s" % (share_id, uk, ondup, async, self.bdstoken, channel, clienttype, web, app_id, logid)

        form_data = {
   
    
            'filelist': filelist_str,
            'path': path_t_save,
        }

        proxies = {
   
    'http': self.pro.get_ip(0, 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/pythonxiaopeng/article/details/109054635

智能推荐

QGIS基本功| 8 初识数据源_qgis qml-程序员宅基地

文章浏览阅读3k次,点赞2次,收藏10次。初次接触GIS的朋友,常常弄不清数据源(Data Source)和图层(Layer)的区别与联系,导致在数据处理和分发时出现一些问题,例如:辛辛苦苦做出了一幅漂亮的地图,为什么再次打开数据时,地图又变回丑陋的样子?怎么才能把工作成果分发给同事,让他打开数据时效果跟我本机一模一样?回答这些问题,我们需要从数据源的基本概念说起。本文从数据源和图层的区别与联系、打开数据源管理器、数据源管理器界面介绍和QGIS支持打开的数据源类型等方面,整体上初步介绍数据源相关知识。后续将陆续推出文章,详细介绍.._qgis qml

kaldi yesorno案例学习记录_local/prepare_lm.sh: line 7: 19989-程序员宅基地

文章浏览阅读270次。学习自Kaldi-yesno详解先来学习run.sh脚本#!/bin/bashtrain_cmd=“utils/run.pl”decode_cmd=“utils/run.pl”#-d filename 判断filename是否为目录,是为真,即下面的是如果waves_yesorno部署目录,去网站下载,||逻辑或,如果前面的语句执行成功,后面的就不执行了,如果前面的出问题,就异常退出(exit 0 代表正常运行程序并退出程序,exit 1 代表非正常运行导致退出程序。其实目的就是: 程序退出后, _local/prepare_lm.sh: line 7: 19989

《专题五 容器化微服务》之《第三章 云原生DevOps》之《第二节 监控》-程序员宅基地

文章浏览阅读181次。我:es的index类似kafka的topic, es的shard类似kafka的partition,副本类似kafka的副本(除了es当有多个请求需要访问同一个index时,各shard的多副本上可并行搜索;相比之下,kafka的partition只能分配给一个消费者组里的一个消费者)20:40 filebeat对k8s的支持:通过监听k8s事件,自动采集容器的标准输出。10 30+ 容器与Kubernetes里的日志,与传统主机模式下的日志有较大区别。13 55+ Filebeat采集容器化日志。

一文带你快速了解业务流程分析和流程建模_系统业务流程介绍与分析-程序员宅基地

文章浏览阅读2.2k次。有哪些业务流程?业务流程如何完成?业务流程有谁参与?流程中有哪些控制流(如判断、同步分支和会合)?多个不同流程建的关系?完成流程所用的资源等。_系统业务流程介绍与分析

nmos导通流向_MOS管-程序员宅基地

文章浏览阅读6.5k次,点赞3次,收藏14次。MOS管P管。通常S接电源。G控制信号,D接负载。当G等于S时。S和D不导通当G小于一定S D和S导通。N管S接地,G接控制,D接电流节点1. MOS管开关电路学习过模拟电路的人都知道三极管是流控流器件,也就是由基极电流控制集电极与发射极之间的电流;而MOS管是压控流器件,也就是由栅极上所加的电压控制漏极与源极之间电流。MOSFET管是FET的一种,可以被制造为增强型或者耗尽型,P沟道或N沟道共四..._nmos导通

2024年Vue最常见的面试题以及答案(面试必过),数据结构与算法面试题及答案_面试题 vue 数结构数据怎么组合-程序员宅基地

文章浏览阅读636次,点赞13次,收藏9次。基础知识是前端一面必问的,如果你在基础知识这一块翻车了,就算你框架玩的再6,webpack、git、node学习的再好也无济于事,因为对方就不会再给你展示的机会,千万不要因为基础错过了自己心怡的公司。前端的基础知识杂且多,并不是理解就ok了,有些是真的要去记。当然了我们是牛x的前端工程师,每天像背英语单词一样去背知识点就没必要了,只要平时工作中多注意总结,面试前端刷下题目就可以了。网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。_面试题 vue 数结构数据怎么组合

随便推点

关于JAVA核心技术(卷一)读后的思考(接口的基本知识的讨论)-程序员宅基地

文章浏览阅读118次。接口接口技术:这种技术主要用来描述类具有什么功能,而并不给出每个功能的具体实现。一个类可以实现一个或多个接口,并在需要接口的地方,随时使用实现了相应接口对象。接口概念:接口不是类,而是对类的一组需求的描述,这些类要遵从接口描述的统一格式进行定义。举个简单的例子:假设有一个类A,其中有一个sort方法是对对象数组进行排序,但要求对象所属的类必须实现了 B接口。假设B接口定义如下..._接口的定义中,对接口的域和方法有什么要求

torch.split()-程序员宅基地

文章浏览阅读3.4k次,点赞3次,收藏9次。所以,torch.split()是一个很有用的函数,可以轻松地将张量分割成任意形状和大小的张量列表,以用于后续处理。官网解释:Splits the tensor into chunks.——PyTorch中用于分割张量的函数。官网链接:https://pytorch.org/docs/stable/torch.html。作用:将一个多维张量分割成多个张量。_torch.split

2022年最新一篇文章教你青龙面板拉库,拉取单文件,安装依赖,设置环境变量,解决没有或丢失依赖can‘t find module之保姆教程(附带几十个青龙面板脚本仓库)_cannot find module 'ds-程序员宅基地

文章浏览阅读8.7w次,点赞29次,收藏441次。没有安装青龙面板的先看我另外一篇教程https://blog.csdn.net/qq_39997540/article/details/122363463?spm=1001.2014.3001.55011.青龙面板拉库打开浏览器进入按照我的主页里的另一篇教程安装好的青龙面板,点击右上角的添加任务编辑任务 1 0-23/1 * * *点击你添加好的拉库任务右边的运行按钮,过几分钟你要拉的库就下载到你的青龙面板了2.分享收集的青龙面板脚本仓库,建议选择拉一个就可以了1.JB库._cannot find module 'ds

hive 报错FAILED: Error in metadata: java.lang.RuntimeException: Unable to instantiate org.apache.hadoo_hiveexception java.lang.runtimeexception: unable t-程序员宅基地

文章浏览阅读1.8k次。使用hive一段时间以后,今天在使用的时候突然报错,如下:hive> show databases;FAILED: Error in metadata: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClientFAILED: Execu_hiveexception java.lang.runtimeexception: unable to instantiate org.apache.h

Python-爬虫(三):爬虫背景的系统性整理——HTML与正则_爬虫 html正则-程序员宅基地

文章浏览阅读317次。爬虫背景的系统性整理一、简单回顾网页结构1、查看网页源代码(1)浏览器选择Chrome 谷歌:本人首选Firefox 火狐:可查看 utf-8 编码中文,并且在源代码界面已排版(2)如何呼出:方法一:右击 - 查看源代码(静态构架)方法二:F12 或 设置-开发者工具 或 右击-检查(动态构架-即能够看到渲染后信息)(3)重点关注什么:【选择】按钮,即左上角的鼠标按钮【Elements】选项卡,即 html 原文与各可直接调试的元素,按多级目录排列小应用:可以删除广_爬虫 html正则

虚拟化应用(三)Hyper-V 2.0 初探-程序员宅基地

文章浏览阅读98次。前面两次我们主要测试了VMWare vSphere 4.1以及vCenter Server 4.1的基本操作,今天先把VMWare放一放,来关注下我们最熟悉的微软。Hyper-V是微软提出的服务器虚拟化解决方案,在微软的虚拟化战略中扮演了重要角色。微软的虚拟化解决方案分为三大部分:服务器虚拟化、桌面虚拟化、应用程序虚拟化。本次我们简要分析下Hyper-V,后面有时间再讨论其余两种虚拟化。测试脚..._hypervm 2.0

推荐文章

热门文章

相关标签