Python爬虫实战:抓取并保存百度云资源(附代码)
2017-12-19 00:00
661 查看
專 欄
❈王雨城,Python中文社区专栏作者
博客: http://www.jianshu.com/u/88ff70818bd1 ❈
寻找并分析百度云的转存api首先你得有一个百度云盘的账号,然后登录,用浏览器(这里用火狐浏览器做示范)打开一个分享链接。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 。
爬取shareid、from、filelist,发送请求转存到网盘
以上面这个资源链接为例(随时可能被河蟹,但是没关系,其他链接的结构也是一样的),我们先用浏览器手动访问,F12 打开控制台先分析一下源码,看看我们要的资源信息在什么地方。控制台有搜索功能,直接搜 “shareid”。定位到4个shareid,前三个与该资源无关,是其他分享资源,最后一个定位到该 html 文件的最后一个标签块里。双击后可以看到格式化后的 js 代码,可以发现我们要的信息全都在里边。如下节选:
可以看到这两行
yunData.PATH 只指向了一个路径信息,完整的 filelist 可以从 yunData.FILEINFO 里提取,它是一个 json ,list 里的信息是Unicode编码的,所以在控制台看不到中文,用Python代码访问并获取输出一下就可以了。直接用request请求会收获 404 错误,可能是需要构造请求头参数,不能直接请求,这里博主为了节省时间,直接用selenium的webdriver来get了两次,就收到了返回信息。第一次get没有任何 cookie ,但是baidu 会给你返回一个BAIDUID ,在第二次 get 就可以正常访问了。yunData.FILEINFO 结构如下,你可以将它复制粘贴到json.cn里,可以看得更清晰。
清楚了这三个参数的位置,我们就可以用正则表达式进行提取了。代码如下:
爬取到了这三个参数,就可以调用之前的 transfer 方法进行转存了。
扫描下方二维码关注公众号后,回复数字“1219”获取本文源代码下载地址。
编 程 狗编程大牛技术分享平台
Python 中 文 社 区
Python中文开发者的精神部落
合作、投稿请联系微信:
pythonpost
— 人生苦短,我用Python —
❈王雨城,Python中文社区专栏作者
博客: http://www.jianshu.com/u/88ff70818bd1 ❈
寻找并分析百度云的转存api首先你得有一个百度云盘的账号,然后登录,用浏览器(这里用火狐浏览器做示范)打开一个分享链接。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 。
爬取shareid、from、filelist,发送请求转存到网盘
以上面这个资源链接为例(随时可能被河蟹,但是没关系,其他链接的结构也是一样的),我们先用浏览器手动访问,F12 打开控制台先分析一下源码,看看我们要的资源信息在什么地方。控制台有搜索功能,直接搜 “shareid”。定位到4个shareid,前三个与该资源无关,是其他分享资源,最后一个定位到该 html 文件的最后一个标签块里。双击后可以看到格式化后的 js 代码,可以发现我们要的信息全都在里边。如下节选:
可以看到这两行
yunData.PATH 只指向了一个路径信息,完整的 filelist 可以从 yunData.FILEINFO 里提取,它是一个 json ,list 里的信息是Unicode编码的,所以在控制台看不到中文,用Python代码访问并获取输出一下就可以了。直接用request请求会收获 404 错误,可能是需要构造请求头参数,不能直接请求,这里博主为了节省时间,直接用selenium的webdriver来get了两次,就收到了返回信息。第一次get没有任何 cookie ,但是baidu 会给你返回一个BAIDUID ,在第二次 get 就可以正常访问了。yunData.FILEINFO 结构如下,你可以将它复制粘贴到json.cn里,可以看得更清晰。
清楚了这三个参数的位置,我们就可以用正则表达式进行提取了。代码如下:
爬取到了这三个参数,就可以调用之前的 transfer 方法进行转存了。
扫描下方二维码关注公众号后,回复数字“1219”获取本文源代码下载地址。
编 程 狗编程大牛技术分享平台
Python 中 文 社 区
Python中文开发者的精神部落
合作、投稿请联系微信:
pythonpost
— 人生苦短,我用Python —
相关文章推荐
- Python爬虫实战六之抓取爱问知识人问题并保存至数据库
- Python爬虫实战六之抓取爱问知识人问题并保存至数据库
- Python爬虫实战六之抓取爱问知识人问题并保存至数据库
- Python爬虫实战(1)——百度贴吧抓取帖子并保存内容和图片
- python爬虫实战--selenium验证码保存+多线程多标签+自动点击+完整代码
- 芝麻HTTP:Python爬虫实战之抓取爱问知识人问题并保存至数据库
- python爬虫实战(1)抓取网页图片自动保存
- python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例
- Python爬虫实战---抓取图书馆借阅信息
- 利用python脚本抓取AC的代码[爬虫+HTMLParser+handle_entityref+正则表达式+模拟登陆+文件操作]
- 最近看了一段时间Python,练习写了一个抓取淘女郎的爬虫,话不多说,上代码
- Python3 爬虫拉勾网抓取数据保存在Excel中
- 使用python爬虫抓取页面之后,将页面保存到Mysql数据库中
- Python爬虫实战——蚂蜂窝国内目的地全抓取
- python制作爬虫并将抓取结果保存到excel中
- Python爬虫实战(4):抓取淘宝MM照片
- Python爬虫实战之抓取淘宝MM照片(四)
- python 爬虫实战 抓取学校bbs相关板块的发帖信息
- Python3 爬虫实战(一)——爬取one每日一句,并保存到本地
- 使用Python编写简单网络爬虫抓取视频下载资源