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性能优化的20条建议
Oct 25 Python
python简单实现旋转图片的方法
May 30 Python
Python实现的微信公众号群发图片与文本消息功能实例详解
Jun 30 Python
对python .txt文件读取及数据处理方法总结
Apr 23 Python
在python中用print()输出多个格式化参数的方法
Jul 16 Python
Python While循环语句实例演示及原理解析
Jan 03 Python
python判断变量是否为int、字符串、列表、元组、字典的方法详解
Feb 13 Python
Python内置函数locals和globals对比
Apr 28 Python
django模板获取list中指定索引的值方式
May 14 Python
pycharm 关掉syntax检查操作
Jun 09 Python
python实现学生成绩测评系统
Jun 22 Python
Pycharm无法打开双击没反应的问题及解决方案
Aug 17 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
linux系统上支持php的 iconv()函数的方法
2011/10/01 PHP
解析php类的注册与自动加载
2013/07/05 PHP
PHP连接MSSQL方法汇总
2016/02/05 PHP
使用symfony命令创建项目的方法
2016/03/17 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
php中上传文件的的解决方案
2018/09/25 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
2010/01/07 Javascript
jquery ui对话框实例代码
2013/05/10 Javascript
使用jQuery.wechat构建微信WEB应用
2014/10/09 Javascript
jQuery使用Selectator插件实现多选下拉列表过滤框(附源码下载)
2016/04/08 Javascript
分享javascript实现的冒泡排序代码并优化
2016/06/05 Javascript
浅谈JS原生Ajax,GET和POST
2016/06/08 Javascript
微信支付 JS API支付接口详解
2016/07/11 Javascript
通过BootStrap实现轮播图的实际应用
2016/09/26 Javascript
BootStrap3使用错误记录及解决办法
2016/12/22 Javascript
Vue.js系列之项目搭建(1)
2017/01/03 Javascript
bootstrap中selectpicker下拉框使用方法实例
2018/03/22 Javascript
Node.js创建HTTP文件服务器的使用示例
2018/05/11 Javascript
jQuery实现简易QQ聊天框
2020/02/10 jQuery
JavaScript常用进制转换及位运算实例解析
2020/10/14 Javascript
[01:25]2015国际邀请赛最佳短片奖——斧王《拆塔英雄:天赋异禀》
2015/09/22 DOTA
Python正则表达式匹配ip地址实例
2014/10/09 Python
在Python中使用判断语句和循环的教程
2015/04/25 Python
在Python中使用matplotlib模块绘制数据图的示例
2015/05/04 Python
python flask框架实现重定向功能示例
2019/07/02 Python
python实现大文本文件分割
2019/07/22 Python
pycharm激活码快速激活及使用步骤
2020/03/12 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
2020/06/17 Python
保安自我鉴定范文
2013/12/08 职场文书
怎么写自荐书范文
2014/02/12 职场文书
保管员岗位职责
2015/02/14 职场文书
放假通知范文
2015/04/14 职场文书
深入理解go缓存库freecache的使用
2022/02/15 Golang
Python中三种花式打印的示例详解
2022/03/19 Python
GoFrame基于性能测试得知grpool使用场景
2022/06/21 Golang