热门搜索:软件下载

怎样把美拍的视频下载下来(python爬取美拍视频)

首页教程怎样把美拍的视频下载下来更新时间:2023-06-14 02:06:22
一.分析视频加载过程,为爬视频做准备(详细)1. 找到视频所在地址

爬取视频地址为https://www.meipai.com/medias/hot
鼠标在界面右击“查看页面源代码”,ctrl f搜索video,发现视频链接。

怎样把美拍的视频下载下来,python爬取美拍视频(1)

页面源代码

复制上图箭头所指链接,发现进入单个视频网址,同理查找网页源代码里是否视频地址,发现没有,考虑视频应该是动态数据,使用抓包工具寻找,然后找到视频地址。

怎样把美拍的视频下载下来,python爬取美拍视频(2)

找到下一级视频地址

复制上述箭头所指链接,发现就是我们要找的只有视频的网页链接!!!

2.分析视频加密过程

可以看出上述视频链接中的参数特别长,可能是在浏览器请求时进行加密了。点击抓包工具中的“网络”里的“媒体”

怎样把美拍的视频下载下来,python爬取美拍视频(3)

视频地址

可以猜测只有视频的地址(https://mvvideo10.meitudata.com/6333bbe70aeb2a0c812gxe965_H264_1_2910a0dd979362.mp4)由单个用户的单个视频网址(https://www.meipai.com/media/6980726254603093045)请求到的,在“源代码”里进行寻找和分析,我们找到“playPicsVideo”以及“decodeMp4.decode”。

怎样把美拍的视频下载下来,python爬取美拍视频(4)

加密函数

搜索“decodeMp4.decode”,然后找到下图红箭头处。

怎样把美拍的视频下载下来,python爬取美拍视频(5)

加密函数

为判断加密过程是否为这一步,打上断点,刷新界面,得:

怎样把美拍的视频下载下来,python爬取美拍视频(6)

调试

由此可知这一步就是加密,鼠标放在‘.decode’上点击到‘.decode’函数的位置上。

怎样把美拍的视频下载下来,python爬取美拍视频(7)

加密函数定义处

另外发现decodeMp4.decode()函数的输入为(https://www.meipai.com/media/6980726254603093045)网址页面源代码里的data-video。

二.思路整理

1.请求源网址‘https://www.meipai.com/medias/hot’,解析得到所有视频的data-id

2.将data-id与’https://www.meipai.com’拼在一起,请求这一拼起来的网址,解析获得标题title与加密函数的输入值data-video

3.对data-video进行加密

4.对加密后得到的网址进行请求,下载视频

三.python实现

import requests from lxml import etree import re import base64 url = 'https://www.meipai.com/medias/hot' resp = requests.get(url) html = etree.HTML(resp.text) #解析提取视频网址 data_url = html.xpath('/html/body/div[2]/div[1]/ul//div[1]/a/@href') #拼成电脑可以读取的网址 video_url = [] for i in data_url: url_i = 'https://www.meipai.com' i video_url.append(url_i) #print(video_url) # 解密函数 def getHex(a): return { 'str': a[4:], 'hex': "".join(list(a[0:4])[::-1]) } def getDec(a): b = str(int(a, 16)) return { 'pre': list(b[0:2]), 'tail': list(b[2:]) } def substr(a, b): c = a[0:int(b[0])] d = a[int(b[0]):int(b[0]) int(b[1])] return c a[int(b[0]):].replace(d, '') def getPos(a, b): b[0] = len(a) - int(b[0]) - int(b[1]) return b def decode(a): b = getHex(a) c = getDec(b['hex']) d = substr(b['str'], c['pre']) return base64.b64decode(substr(d, getPos(d, c['tail']))) for i_url in video_url: #提取解密前的参数 response = requests.get(i_url) obj = re.compile(r'data-video="(.*?)">',re.S) data_video = obj.findall(response.text)[0] html2 = etree.HTML(response.text) title = html2.xpath('/html/body/div[2]/div[1]/div[2]/h1/text()')[0].strip() #print(data_video) #print(title) data_video_url = decode(data_video).decode() # 下载视频 with open(r'./video/' title '.mp4', mode='wb') as f: f.write(requests.get('https:' data_video_url).content)四.总结

本文讲述我自学爬虫时关于爬取美拍视频的一些思考过程,主要分析如同通过抓包工具找到我们要的数据,这也是我薄弱的地方,与大家一起学习。关于python的学习,欢迎大家一起讨论学习。冲!!!

怎样把美拍的视频下载下来,python爬取美拍视频(8)

,
软件推荐