赞
踩
1. Charles获取视频接口
爬取之前先将手机与PC至于同局域网并确保手机WIFI的代理端口为8888,然后打开Charles获取视频请求的链接,如图:
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')
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。