前些日子写了一个利用python批量下载微博配图的程序,因为是基于微博的移动端,即weibo.cn  ,难度要小很多。而当我面对美拍时却发现,好像有点困难啊。

美拍的页面有很多动态元素,当我们打开某一用户的主页时,你会发现,有些内容会随着滚动条的下拉自动加载。也就是说,当你打算查看页面源代码时,你会发现,这些代码是不完全的,缺少了那些后来自动加载的元素的代码。因为对相关知识缺乏了解,我甚至一度以为是::after这种伪元素在作怪,结果当然是被各路大神无情嘲讽。最后还是从依云那里得到了关键字——Ajax(异步JavaScript和XML)通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

凭着这个关键字,在知乎上看到一个回答,思路是找到并筛选类型为text/html的Get请求,最后在模拟这个请求。也就是说,ajax同样是需要发送请求的。在众多请求中,我发现了一个名为crossdomain的请求(每次向下浏览页面,都会发送这个请求,后来猜测它似乎和视频自动播放有关),一度以为找到了目标,后来证实,自己完全被这个请求误导了。后来在 Binuxの杂货铺中,发现了真正的答案。他的文章中说“AJAX 一般是通过 XMLHttpRequest 对象接口发送请求的,XMLHttpRequest 一般被缩写为 XHR。点击网络面板上漏斗形的过滤按钮,过滤出 XHR 请求。”  XHR,这三个字母真是太有分量了。

1.随意选取一个用户,进入她的主页,开启我们的开发者工具,审查页面元素。

2.将浏览器右侧滚动条滑到最底端,页面自动加载新内容,观察请求。

3.真相只有一个,类型为json的6个请求便是我们苦苦寻找的真相,是它们导致了这种炫酷的自动加载页面效果。观察参数,和响应。

4.响应类型是json(JavaScript Object Notation) 是一种轻量级的数据交换格式。直接在消息头中,提取请求网址,输入到地址栏中,看一下。建议下载JsonView这个浏览器插件,这样更容易观察数据。例子:http://www.meipai.com/users/user_timeline?page=14&count=12&single_column=1&tid=50756498

5.json的类型是一个字典,字典中有3个键值对,其中的medias是我们想要的,它对应的值是一个列表,列表中包含了我们想要的所有东西。字典真是一个好东西,它意味着我们甚至不需要利用正则表达式来处理我们所获得数据。

6.通过对XHR请求的观察发现,若想获得同一个用户的所有作品,只需要将请求地址中page的值从1开始遍历即可。

例如:http://www.meipai.com/users/user_timeline?page=14&count=12&single_column=1&tid=50756498 这一点也在第3步的参数中体现出来了。

当然也可以像这样,自己设置参数,此时对应的page_url是http://www.meipai.com/users/user_timeline

requests.get(page_url,params = paramters)

7.最后,条例已经如此清晰了,下面就让python来替我们解决这不断重复的工作吧。

# -*- coding: utf-8 -*-
__author__ = 'rqy'import os
import requestsuser_id = '50756498' #user id
videos_count = 167   #user's videos_countdef download(url,name):print 'Loading ' + name + '.mp4'f = open(r'./videos/'+ name + '.mp4','wb')f.write(requests.get(url).content)f.close()def main():if not os.path.isdir(r'./videos/'):os.mkdir(r'./videos/')for i in range(1,videos_count + 1):url = 'http://www.meipai.com/users/user_timeline?page='+ str(i) + '&count=12&single_column=1&tid=' + user_idhtml = requests.get(url)cnt  = len(html.json()['medias'])if cnt == 0:breakelse:for j in range(0,cnt):url_mp4  = html.json()['medias'][j]['video']name_mp4 = str(html.json()['medias'][j]['id'])download(url_mp4,name_mp4)main()

总结:整个过程中,最难的就是分析页面元素,寻找页面的提交数据,最后的数据处理反而因为json变得简单了。最开始陷入困境的时候真的只是差个关键字,倘如一早便知道ajax,问题解决起来还会顺利的多。去某社区提问时,因为搞错了方向,被人嘲讽,觉得某些大牛戾气还是蛮大的。我不奢求别人手把手教我,但我希望大牛面对我们这些小白时,能多多体谅一下。最后感谢依云,binux。

利用python批量下载美拍视频相关推荐

  1. 利用python 批量下载美拍视频

    前些日子写了一个利用Python批量下载微博配图的程序,因为是基于微博的移动端,即weibo.cn  ,难度要小很多.而当我面对美拍时却发现,好像有点困难啊. 美拍的页面有很多动态元素,当我们打开某一 ...

  2. python批量下载bilibili视频_python 批量下载bilibili视频的gui程序

    运行效果: 完整代码: # !/usr/bin/python # -*- coding:utf-8 -*- # time: 2019/07/02--08:12 __author__ = 'Henry' ...

  3. python批量下载bilibili视频_如何批量下载bilibili的视频?

    貌似现在 you-get 已经支持批量下载了.通过下面命令就可以批量下载了 you-get --playlist 网址 本来是带这个需求来的,看到 Venchi 的答案,装了 Python3 之后发现 ...

  4. 利用Python批量下载必由学答题卡

    零.序言 在期末语文考试结束后,班主任老师想要下载一些高分作文的答题卡,但人工操作下载一张张答题卡是一个费时费力还会出现很多失误的工作,所以笔者决定尝试利用Python编写程序解决该问题. 一.分析目 ...

  5. 利用Python批量下载学生PDF教材

    作为一个业余爱好者,一直在CSDN学习,终于有机会也来写一篇记录一下这两天的成果. 最近因为网课上线,教育部公开了义务教育用书的电子版本,出于好奇打开看了看,看网站上不仅可以在线观看,还能够下载,于是 ...

  6. python批量下载bilibili视频_关于bilibili视频下载的一些小思路

    关于bilibili视频下载的一些小思路 (基于b站官方接口实现) 由于B站近期某些蛋(chou)疼(feng)表现,某十八线女团不知名野站(我无聊作死的地方)为了稳健,需要备份一份所有视频.然而市面 ...

  7. 利用Python you-get 下载网页视频

    平时可以使用python 下 you-get 命令 下载一些视频. 如果还没有python,请先安装 python 然后 ,如果是windows 下 ,先打开 cmd 命令行, 输入 pip inst ...

  8. 如何用python批量下载这些视频?只需 15 行代码,即可轻松实现

    话说人生苦短,我用Python. 如果学python不是为了下载这些视频,那将毫无意义! 啊呸,老色批 咳咳,我们开始正题. 一.事前前奏 首先没装Python.pycharm的铁子先自己安装一下,我 ...

  9. Python批量下载ts视频文件,并用ffmpeg合并

    目录 一.ts文件的由来 二.下载ts文件 1.下载index.m3u8,并做相应处理 2.下载ts文件 三.ffmpeg合并ts文件 一.ts文件的由来 ts文件,ts即"Transpor ...

最新文章

  1. 如何将一个彩色图像转换成黑白图像
  2. python基础常用语句-Python基础6—常用语句
  3. mysql自动异地备份脚本_MYSQL数据库自动本地/异地双备份/MYSQL增量备份
  4. python怎么设置函数超时时间_在python运行时为函数设置超时秒数
  5. RESTful API版本控制策略
  6. 初步认识Volatile-一段代码引发的思考
  7. dnn模型 list index out of range_基于svm的财务预警模型
  8. 用计算机程序求n,计算机编程 算法 求n!.doc
  9. Leetcode431.将N叉树编码为二叉树(golang)
  10. 三大技术要素为互联网金融2.0保驾护航
  11. android js模板下载地址,template.js
  12. 浅谈压缩感知(二十九):压缩感知算法之迭代硬阈值(IHT)
  13. 例3.5 二叉排序树 - 九度教程第35题(二叉排序树)
  14. Android Ble蓝牙中如何获取RawData ,UUID,Major,Minor,Measured power at 1 meter的数据。
  15. 熊猫烟花集团完美见证异速联远程接入系统
  16. Paypal支付跳转失败的原因及解决办法
  17. 王道书 P150 T18(在中序线索二叉树里找指定节点在后序的前驱节点)+ 拓展(在中序线索二叉树里找指定节点在先序的后继节点)
  18. 《通信原理》用matlab实现加性高斯白噪声信道实验
  19. 堪萨斯州立大学 计算机科学,堪萨斯州立大学
  20. 微软云Blob存储账号使用——Java使用

热门文章

  1. 2021年最新的分类预测模型你知道有哪些吗?
  2. 计算机专业黑板报迎新,新学期迎新晚会黑板报
  3. AMZI! PROLOG白皮书
  4. 中国船用燃料油行业研究与投资战略报告(2022版)
  5. Android系统开启导航栏NavigationBar(虚拟按键)
  6. 视频会议室硬装有哪些讲究
  7. 霍尼韦尔与IDEMIA宣布组建战略联盟,共同开发智慧楼宇产品
  8. 大数据课程有必要学吗?
  9. 哈工大计算机学院2017,2017年哈工大计算机学院接收推免生公告
  10. 开山之作:Maass、1997:Networks of Spiking Neurons: The Third Generation of Neural Network Models