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正则表达式
Jan 15 Python
Pycharm学习教程(6) Pycharm作为Vim编辑器使用
May 03 Python
机器学习10大经典算法详解
Dec 07 Python
详解django三种文件下载方式
Apr 06 Python
Python判断变量名是否合法的方法示例
Jan 28 Python
Python正则表达式实现简易计算器功能示例
May 07 Python
让Python脚本暂停执行的几种方法(小结)
Jul 11 Python
django将数组传递给前台模板的方法
Aug 06 Python
python抓取多种类型的页面方法实例
Nov 20 Python
python中rc1什么意思
Jun 19 Python
Python hashlib模块的使用示例
Oct 09 Python
基于Python的接口自动化读写excel文件的方法
Jan 15 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笔记之:数据类型与常量的使用分析
2013/05/14 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
2014/08/08 PHP
PHP实现的一致性Hash算法详解【分布式算法】
2018/03/31 PHP
JavaScript 私有成员分析
2009/01/13 Javascript
javascript 页面只自动刷新一次
2009/07/10 Javascript
向大师们学习Javascript(视频与PPT)
2009/12/27 Javascript
jquery URL参数判断,确定菜单样式
2010/05/31 Javascript
JQuery扩展插件Validate—4设置错误提示的样式
2011/09/05 Javascript
javascript字母大小写转换的4个函数详解
2014/05/09 Javascript
JavaScript弹出窗口方法汇总
2014/08/12 Javascript
js设置cookie过期当前时间减去一秒相当于立即过期
2014/09/04 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
jQuery ajax分页插件实例代码
2016/01/27 Javascript
jQuery实现无限往下滚动效果代码
2016/04/16 Javascript
Bootstrap零基础学习第一课之模板
2016/07/18 Javascript
实现JavaScript高性能的数据存储
2016/12/11 Javascript
easyui下拉框动态级联加载的示例代码
2017/11/29 Javascript
详解Vue CLI3 多页应用实践和源码设计
2018/08/30 Javascript
全面解析vue router 基本使用(动态路由,嵌套路由)
2018/09/02 Javascript
使用vue打包进行云服务器上传的问题
2020/03/02 Javascript
完美解决通过IP地址访问VUE项目的问题
2020/07/18 Javascript
python使用sorted函数对列表进行排序的方法
2015/04/04 Python
Python中实现对Timestamp和Datetime及UTC时间之间的转换
2015/04/08 Python
Python数据可视化编程通过Matplotlib创建散点图代码示例
2017/12/09 Python
Python实现矩阵相乘的三种方法小结
2018/07/26 Python
Python实现语音识别和语音合成功能
2019/09/20 Python
django框架基于queryset和双下划线的跨表查询操作详解
2019/12/11 Python
详解使用canvas保存网页为pdf文件支持跨域
2018/11/23 HTML / CSS
带你认识HTML5中的WebSocket
2015/05/22 HTML / CSS
弘扬职业精神演讲稿
2014/03/20 职场文书
高中国旗下的演讲稿
2014/08/28 职场文书
联谊活动总结
2014/08/28 职场文书
感恩母亲节活动总结
2015/02/10 职场文书
本科毕业论文答辩稿
2015/06/23 职场文书
学生会自荐信
2019/05/16 职场文书
详细谈谈JavaScript中循环之间的差异
2021/08/23 Javascript