7

抓取某音动态壁纸

 1 year ago
source link: http://www.justdopython.com/2023/01/02/python-dywallpaper/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

尝试给本文制作了一个视频版

以下是文字版本

之前分享过 下载必应壁纸,通过API直接获取

1.png

至于小伙伴们想要这个封图,我也没有。

不过继续带来一波靓丽壁纸,而且是动态的,我的桌面壁纸又换了:

2.gif

每天换着花样欣赏一波波动态壁纸

3.png

桌面立刻拥有了高颜值,简直跟刷美女短视频一样啊。

对的,这些动态壁纸就是短视频!

4.png

别问我怎么知道的,

因为上个月才分享过 抓取某音短视频数据

启动mitmweb, 下图的share_url就是我桌面上那个动态壁纸,在浏览器中打开就是短视频页面

5.png

所谓的动态壁纸不过是用户上传的好看的短视频!某音的产品MM为你精心挑选

获取下载链接

这些壁纸(短视频)的MP4地址怎么获取呢?

3.png

很简单,都不用python去模拟请求了。

下载某音windows版本进行安装,

命令行启动mitmweb,点击下图红框内的五角星进入动态壁纸页面

6.png

mitmproxy会出现https://www.douyin.com/aweme/v1/web/wallpaper/开头的链接,选好它然后点击“Download”按钮,会下载一个“content.data”的文件,里面包含动态壁纸的MP4下载地址!

7.png

我们可以用python来处理它,然后去重,放入列表中

import json

url_list = []
url_dict = {}
with open('content.data', 'r',encoding='utf-8') as f:
    x = json.load(f)
    for i in x['aweme_list']:
        #去掉特殊的
        if 'anchor_info' in i:
            continue
        else:
            for i in i['video']['bit_rate']:
                #url_list有3个url,但视频内容相同,取最后一个
                url = i['play_addr']['url_list'][2]
                #video_id相同的是同一个视频,取出video_id,用字典去重
                a = url.split('video_id=')[1].split('&line=')[0]
                print(a)
                url_dict[a] = url

#去重后的视频添加到列表中
for k,v in url_dict.items():
    url_list.append(v)

print(len(url_list))
print(url_list)

输出得到前18个壁纸视频的下载链接,而且顺序跟某音上看到的一模一样

['https://www.douyin.com/aweme/v1/play/?video_id=v0d00fg10000cagm35rc77u3k4nb0430&line=0&file_id=fec3f8eeb45e48a18f30dfd96922f659&sign=4450c5609c69d0a5c1100e6801cf25dd&is_play_url=1&source=PackSourceEnum_AWEME_DETAIL', ...]

下载壁纸短视频

有链接就简单了,继续我们的套路,参考用Python实现实时显示视频下载进度

import os
import requests
from tqdm import tqdm

VIDEO_PATH = r'videos'
def download(url,fname):
    # 用流stream的方式获取url的数据
    resp = requests.get(url, stream=True,verify=False)
    total = int(resp.headers.get('content-length', 0))
    with open(fname, 'wb') as file, tqdm(
        desc=fname,
        total=total,
        unit='iB',
        unit_scale=True,
        unit_divisor=1024,
    ) as bar:
        for data in resp.iter_content(chunk_size=1024):
            size = file.write(data)
            bar.update(size)


if __name__ == "__main__":
    url_list = ['https://www.douyin.com/aweme/v1/play/?video_id=v0d00fg10000cagm35rc77u3k4nb0430&line=0&file_id=fec3f8eeb45e48a18f30dfd96922f659&sign=4450c5609c69d0a5c1100e6801cf25dd&is_play_url=1&source=PackSourceEnum_AWEME_DETAIL', 'https://www.douyin.com/aweme/v1/play/?video_id=v0200fg10000c9glhfrc77u0fbj4iqs0&line=0&file_id=e330ce20f5f245e9b1923f8cd26b6ef9&sign=0ee1a91a52645237a4d1382c22a0b540&is_play_url=1&source=PackSourceEnum_AWEME_DETAIL', ...]
    for url in url_list:
        video_name = url[47:67]
        video_full_path = os.path.join(VIDEO_PATH,"%s.mp4" % video_name)
        download(url, video_full_path)

8.png

666,动态壁纸色香味,简直不要太飒

9.png

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK