python爬取抖音视频的实例分析


Posted in Python onJanuary 19, 2021

现在抖音的火爆程度,大家都是有目共睹的吧,之前小编在网络上发现好玩的事情,就是去爬取一些网站,因此,也考虑能否进行抖音上的破案去,在实际操作以后,真的实现出来了,利用自动化工具,就可以轻松实现了,后有小伙伴提出把appium去掉瘦身之后也是可以实现的,那么看下详细操作内容吧。

1、mitmproxy/mitmdump抓包

import requests
path = 'D:/video/'
num = 1788
def response(flow):
 global num
 target_urls = ['url']
 for url in target_urls:
   if flow.request.url.startswith(url):
      filename = path + str(num) + '.mp4
   res = requests.get(flow.request.url, stream=True)
    with open(filename, 'ab') as f:
    f.write(res.content)
    f.flush()
    print(filename + '下载完成')
   num += 1

2、Appium对手机进行模拟操作

利用Start Server按钮即可启动appium服务

python爬取抖音视频的实例分析

再点击Start Session即可启动Android手机上的抖音app并进入到启动页面

3、python脚本来驱动app,直接在pycharm运行即可

实例扩展:

import requests
import json
import re
import os
from pprint import pprint as pp
import queue


class DouYin:
 header = {
  'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
  'accept-encoding': 'gzip, deflate, br',
  'accept-language': 'zh-CN,zh;q=0.9',
  'cache-control': 'max-age=0',
  'upgrade-insecure-requests': '1',
  'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
 }

 def __init__(self, url=None):
  self.url = self.get_RealAddress(url)
  # 获取用户视频的url
  self.user_video_url = 'https://www.douyin.com/aweme/v1/aweme/post/?{0}'
  self.user_id = re.search(r'user/(.*)\?', self.url).group(1)		# 用户id
  requests.packages.urllib3.disable_warnings()
  self.session = requests.Session()
  self.target_folder = ''		# 创建文件的路径
  self.queue = queue.Queue()		# 生成一个队列对象

 def user_info(self):
  self.mkdir_dir()
  p = os.popen('node fuck.js %s' % self.user_id) # 获取加密的signature
  signature = p.readlines()[0]

  user_video_params = {
   'user_id': str(self.user_id),
   'count': '21',
   'max_cursor': '0',
   'aid': '1128',
   '_signature': signature
  }

  # 获取下载视频的列表
  def get_aweme_list(max_cursor=None):
   if max_cursor:
    user_video_params['max_cursor'] = str(max_cursor)
   user_video_url = self.user_video_url.format(
    '&'.join([key + '=' + user_video_params[key] for key in user_video_params])) # 拼接参数
   response = requests.get(
    url=user_video_url, headers=self.header, verify=False)
   contentJson = json.loads(response.content.decode('utf-8')) # 将返回的进行utf8编码
   aweme_list = contentJson.get('aweme_list', [])
   for aweme in aweme_list:
    video_name = aweme.get(
     'share_info', None).get('share_desc', None)  # 视频的名字
    video_url = aweme.get('video', None).get('play_addr', None).get(
     'url_list', None)[0].replace('playwm', 'play')  # 视频链接
    self.queue.put((video_name, video_url)) # 将数据进队列
   if contentJson.get('has_more') == 1: # 判断后面是不是还有是1就是还有
    return get_aweme_list(contentJson.get('max_cursor')) # 有的话获取参数max_cursor
  get_aweme_list()

 # 下载视频
 def get_download(self):
  while True:
   video_name, video_url = self.queue.get()
   file_name = video_name + '.mp4'
   file_path = os.path.join(self.target_folder, file_name)
   if not os.path.isfile(file_path):
    print('download %s form %s.\n' % (file_name, video_url))
    times = 0
    while times < 10:
     try:
      response = requests.get(
       url=video_url, stream=True, timeout=10, verify=False) # 开启流下载
      with open(file_path, 'wb') as f:
       for chunk in response.iter_content(1024): # 返回迭代对象
        f.write(chunk)
       print('下载成功')
      break
     except:
      print('下载失败')
     times += 1

 # 创建对应的文件夹

 def mkdir_dir(self):
  current_folder = os.getcwd()
  self.target_folder = os.path.join(
   current_folder, 'download/%s' % self.user_id)
  if not os.path.isdir(self.target_folder):
   os.mkdir(self.target_folder)

 # 短链接转长地址
 def get_RealAddress(self, url):
  if url.find('v.douyin.com') < 0:
   return url
  response = requests.get(
   url=url, headers=self.header, allow_redirects=False) # allow_redirects 允许跳转
  return response.headers['Location']

if __name__ == '__main__':
 douyin = DouYin(url='http://v.douyin.com/J2B9Sk/')
 douyin.user_info()
 douyin.get_download()

到此这篇关于python爬取抖音视频的实例分析的文章就介绍到这了,更多相关如何使用python爬取抖音视频内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python中requests库session对象的妙用详解
Oct 30 Python
TensorFlow实现iris数据集线性回归
Sep 07 Python
Python3的介绍、安装和命令行的认识(推荐)
Oct 20 Python
python实现对输入的密文加密
Mar 20 Python
利用python如何在前程无忧高效投递简历
May 07 Python
django 消息框架 message使用详解
Jul 22 Python
使用Python实现Wake On Lan远程开机功能
Jan 22 Python
Python如何批量获取文件夹的大小并保存
Mar 31 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
Apr 20 Python
django的autoreload机制实现
Jun 03 Python
使用jupyter notebook运行python和R的步骤
Aug 13 Python
如何在Python中创建二叉树
Mar 30 Python
python中的插入排序的简单用法
Jan 19 #Python
Python实现淘宝秒杀功能的示例代码
Jan 19 #Python
Python爬虫后获取重定向url的两种方法
Jan 19 #Python
详解Python+Selenium+ChromeDriver的配置和问题解决
Jan 19 #Python
VSCODE配置Markdown及Markdown基础语法详解
Jan 19 #Python
python+selenium自动化实战携带cookies模拟登陆微博
Jan 19 #Python
selenium携带cookies模拟登陆CSDN的实现
Jan 19 #Python
You might like
使用Apache的rewrite技术
2006/06/22 PHP
php函数实现判断是否移动端访问
2015/03/03 PHP
PHP自定义函数实现格式化秒的方法
2016/09/14 PHP
php+js实现百度地图多点标注的方法
2016/11/30 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
2017/02/04 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
一个报数游戏js版(约瑟夫环问题)
2010/08/05 Javascript
jquery中的 $(&quot;#jb51&quot;)与document.getElementById(&quot;jb51&quot;) 的区别
2011/07/26 Javascript
Javascript数组操作函数总结
2015/02/05 Javascript
详解JavaScript中shift()方法的使用
2015/06/09 Javascript
JavaScript基于原型链的继承
2016/06/22 Javascript
详解微信小程序入门五: wxml文件引用、模版、生命周期
2017/01/20 Javascript
js获取ip和地区
2017/03/10 Javascript
javascript实现非常简单的小数取整功能示例
2017/06/13 Javascript
JS多个表单数据提交下的serialize()应用实例分析
2019/08/27 Javascript
VUE注册全局组件和局部组件过程解析
2019/10/10 Javascript
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
原生JS实现音乐播放器的示例代码
2021/02/25 Javascript
[03:51]吞吞映像 每周精彩击杀top10第二弹
2014/06/25 DOTA
python模块smtplib实现纯文本邮件发送功能
2018/05/22 Python
python 求一个列表中所有元素的乘积实例
2019/06/11 Python
详细分析Python collections工具库
2020/07/16 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
2020/09/03 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
英国森林假期:Forest Holidays
2021/01/01 全球购物
c++工程师面试问题
2013/08/04 面试题
简历的自我评价范文
2014/02/04 职场文书
企业年会主持词
2014/03/27 职场文书
房产继承公证书
2014/04/09 职场文书
教师查摆问题自查报告
2014/10/11 职场文书
大学生个人简历自荐信
2015/03/06 职场文书
婚礼伴郎致辞
2015/07/28 职场文书
2016大学军训通讯稿
2015/11/25 职场文书
2016年幼儿园教师师德承诺书
2016/03/25 职场文书
利用Python网络爬虫爬取各大音乐评论的代码
2021/04/13 Python
教你怎么用Python监控愉客行车程
2021/04/29 Python