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中yield关键词的作用与用法
Nov 29 Python
Python面向对象类的继承实例详解
Jun 27 Python
Python使用sorted对字典的key或value排序
Nov 15 Python
Python切片操作去除字符串首尾的空格
Apr 22 Python
python gensim使用word2vec词向量处理中文语料的方法
Jul 05 Python
python银行系统实现源码
Oct 25 Python
Python程序控制语句用法实例分析
Jan 14 Python
DjangoWeb使用Datatable进行后端分页的实现
May 18 Python
Python读取多列数据以及用matplotlib制作图表方法实例
Sep 23 Python
Python常用GUI框架原理解析汇总
Dec 07 Python
浅析python实现动态规划背包问题
Dec 31 Python
浅析Python OpenCV三种滤镜效果
Apr 11 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
PHP 图片文件上传实现代码
2010/12/29 PHP
深入php多态的实现详解
2013/06/09 PHP
PHP图片处理之图片旋转和图片翻转实例
2014/11/19 PHP
javascript+php实现根据用户时区显示当地时间的方法
2015/03/11 PHP
ThinkPHP框架分布式数据库连接方法详解
2017/03/14 PHP
html下载本地
2006/06/19 Javascript
extJs 文本框后面加上说明文字+下拉列表选中值后触发事件
2009/11/27 Javascript
js TextArea的选中区域处理
2010/12/28 Javascript
jQuery之日期选择器的深入解析
2013/06/19 Javascript
javascript闭包的高级使用方法实例
2013/07/04 Javascript
JS实现点击文字对应DIV层不停闪动效果的方法
2015/03/02 Javascript
javascript实现树形菜单的方法
2015/07/17 Javascript
jQuery获取DOM节点实例分析(2种方式)
2015/12/15 Javascript
Jquery和angularjs获取check框选中的值的方法汇总
2016/01/17 Javascript
Node学习记录之cluster模块
2017/05/31 Javascript
JavaScript订单操作小程序完整版
2017/06/23 Javascript
react-native中ListView组件点击跳转的方法示例
2017/09/30 Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
2017/12/26 Javascript
Angular5中调用第三方库及jQuery的添加的方法
2018/06/07 jQuery
微信小程序Page中data数据操作和函数调用方法
2019/05/08 Javascript
vue视图不更新情况详解
2019/05/16 Javascript
Windows下安装 node 的版本控制工具 nvm
2020/02/06 Javascript
python网络编程学习笔记(二):socket建立网络客户端
2014/06/09 Python
Python中super关键字用法实例分析
2015/05/28 Python
Python的时间模块datetime详解
2017/04/17 Python
pygame游戏之旅 如何制作游戏障碍
2018/11/20 Python
日本索尼音乐商店:Sony Music Shop
2018/07/17 全球购物
CHARLES & KEITH加拿大官网:新加坡时尚品牌
2020/03/26 全球购物
计算机专业毕业生自荐信范文
2014/03/06 职场文书
大学生学习2014全国两会心得体会
2014/03/13 职场文书
医学求职自荐信
2014/06/21 职场文书
关于美容院的活动方案
2014/08/14 职场文书
兵马俑的导游词
2015/02/02 职场文书
家长对孩子的寄语
2015/02/26 职场文书
网络营销实训总结
2015/08/03 职场文书
详解MindSpore自定义模型损失函数
2021/06/30 Python