Python爬取 "抖音" App短视频信息

1. Charles获取视频接口

 爬取之前先将手机与PC至于同局域网并确保手机WIFI的代理端口为8888,然后打开Charles获取视频请求的链接,如图:

video_url

2. 手动上滑触发视频请求接口

  自动化滑动刷新有尝试过,但是由于技术有限,不能实现抖音APP的登录,所以用Charles只能获取视频下载链接,而不能获取其他有效信息,比如视频的名称、作者名称、获赞数、转发量等。

3. Python脚本获取视频信息

  使用Python脚本拦截response爬取视频信息并下载视频,同时将视频信息存储至JSON。

4. 视频无水印

  如图:

from mitmproxy import ctx
import json
import requests
import time
import os
'''
想要学习Python?Python学习交流群:984632579满足你的需求,资料都已经上传群文件,可以自行下载!
'''
def response(flow):
    """
    抓取抖音标题、APP视频链接、作者、抖音ID、发布时间、获赞数、评论和转发数等信息, 并将结果保存为JSON格式.
    :return: None
    """
    # 通过Charles获取的抖音视频信息的URL接口
    url = 'https://api.amemv.com/'
    if flow.request.url.startswith(url):
        # 获取服务器返回的响应
        text = flow.response.text
        # 转化为Json格式
        dyjson = json.loads(text)
        info = ctx.log.info

        # 获取视频列表
        aweme_list = dyjson.get('aweme_list')
        # 遍历列表,获取每个视频的相应数据
        for i in range(len(aweme_list)):
            # 视频标题
            title = aweme_list[i].get('share_info').get('share_title')
            # 视频链接
            videourl = aweme_list[i].get('video').get('play_addr').get('url_list')[0]
            # 保存视频
            res = requests.get(videourl, stream=True)
            # 规范文件命名
            _str = ['\\', '/', ':', '*', '?', '"', '<', '>', '|', '.', '..', '?']
            for _ in _str:
                if _ in title:
                    title.replace(_, '')
            # 判断文件路径是否存在
            save_dir = './video/'
            if not os.path.exists(save_dir):
                os.mkdir(save_dir)
            with open('{}/{}.mp4'.format(save_dir, title), 'wb') as f:
                f.write(res.content)

            # 作者名称
            nickname = aweme_list[i].get('author').get('nickname')
            # 抖音ID
            short_id = aweme_list[i].get('author').get('short_id')
            # 发布时间
            create_time = aweme_list[i].get('create_time')
            # 格式化
            create_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(create_time))
            # 获赞、评论、转发数
            digg_count = aweme_list[i].get('statistics').get('digg_count')
            comment_count = aweme_list[i].get('statistics').get('comment_count')
            share_count = aweme_list[i].get('statistics').get('share_count')

            # 显示所有获取信息
            info("标题:" + title)
            info("URL:" + videourl)
            info("作者: " + nickname)
            info("ID: " + short_id)
            info("发布时间: " + create_time)
            info("获赞:" + str(digg_count))
            info("评论:" + str(comment_count))
            info("转发:" + str(share_count))
            info('-'*80)

            # 保存为json文件
            data = {
                'title': title,
                'url': videourl,
                'nickname': nickname,
                'douyin_id': short_id,
                'create_time': create_time,
                'diggs': digg_count,
                'commments': comment_count,
                'shares': share_count
            }

            # 下载视频
            with open('./douyin.json', 'a', encoding='utf-8') as f:
                f.write(json.dumps(data, indent=2, ensure_ascii=False))
                f.write(', \n')

 

猜你喜欢

转载自blog.csdn.net/fei347795790/article/details/88691575