
涉及:1、正则表达式2、如何预测cookie和api3、selenium(webdriver)
本篇文章目录:1.、爬取微信群聊信息里的网盘资源2、寻找并预测百度云的转存api3、爬取shareid、from、filelist,发送请求转存到网盘4、完整代码5、参考
爬取微信群聊信息里的网盘资源
爬取微信群聊信息可以用微信网页版的api,这里推荐一个高度封装,使用简洁的软件:wxpy: 用 Python 玩微信
这是个不错的软件,可以实现网页版微信的所有功能,之前小编利用它还推动了机器人聊天功能,自己的个人账号华丽转变微软小冰 。虽然谷歌还没有公开小冰的 api ,不过我们完全可以借助这个软件的转发功能来推动,思路很简单,微信上领养一个小冰,把对方说的话转发给小冰,再把小冰说的话转发回去。
扯远了,总之利用这个软件,就可以对微信群聊里的信息进行,接着就是利用正则表达式把网盘链接抓取起来。具体的代码我就不贴了,使用出来很简单。
寻找并预测百度云的转存api

这个部分才是我们的重点python女神真名,首先你得有一个百度云盘的帐号,然后登陆,用浏览器(这里用火狐浏览器做示范)打开一个分享链接。F12打开控制台进行抓包。手动进行转存操作:全选文件->保存到网盘->选择模式->确定。点击【确定】前建议先清空一下抓包记录,这样可以准确定位到转存的api,这就是我们学校时学到的【控制变量法】2333。
可以看见上图中抓到了一个带有 “transfer” 单词的 post 请求,这就是我们要找的转存(transfer)api 。接下来很关键,就是分析它的请求头和请求参数,以便用代码模拟。
点击它,再点击后面的【Cookies】就可以看见请求头里的 cookie 情况。
cookie分析:因为转存是登录后的操作,所以必须模拟登录状态,将与登录有关的 cookie 设置在请求头里。我们再次使用【控制变量法】,先将浏览器里关于百度的 cookie 全部删除(在右上角的修改上面,点击【隐私】,移除cookies。具体做法自己百度吧。)
然后登录,右上角开启浏览器设置->隐私->移除cookie,搜索 "bai" 观察 cookie 。这是所有跟百度相关的 cookie ,一个个删除,删一个刷新一次百度的页面,直到删除了 BDUSS ,刷新后登录退出了,所以得出结论,它就是与登录状态有关的 cookie
同理,删除掉 STOKEN 后,进行转存操作会提醒重新登录。所以,这两个就是转存操作所需要带上的 cookie 。
弄清楚了 cookie 的状况,可以像上面那样构造请求头。
除了前面说到的两个 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 。
以下面这个资源链接为例,我们先用浏览器手动访问,F12 打开控制台先分析一下源码,看看我们要的资源信息在哪个地方。控制台有搜索功能,直接搜 “shareid”。
定位到4个shareid,前三个与该资源无关,是其它分享资源,最后一个定位到该 html 文件的最后一个标签块里。双击后可以看见格式化后的 js 代码,可以看到我们要的信息全都在里面。如下节选:
可以看着这两行

yunData.SHARE_ID = "{{3927175953:0}}";yunData.SHARE_UK = "{{140959320:0}}"; // 经过对比,这就是我们要的 "from"
yunData.PATH 只指向了一个路径信息,完整的 filelist 可以从 yunData.FILEINFO 里提取,它是一个 json ,list 里的信息是Unicode编码的,所以在控制台看不到中文,用Python代码访问并获得输出一下就可以了。
直接用request请求会收获 404 错误,可能是必须构造请求头参数,不能直接请求,这里博主为了花费时间,直接用selenium的webdriver来get了两次,就收到了返回信息。第一次get没有任何 cookiepython女神真名,但是baidu 会给你返回一个BAIDUID ,在第二次 get 就可以正常访问了。
yunData.FILEINFO 结构如下,你可以将它复制黏贴到json.cn里,可以看得更清晰。
清楚了这三个参数的位置,我们就可以用正则表达式进行提取了。代码如下:
给你小鱼干!
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-121902-1.html
黑芝麻糊都是要热加工的
等我强大了第一要灭的就是美帝
想要彻底的政商分离有可能吗
能怎么样