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代码(逐级优化)
May 25 Python
在Python中使用sort()方法进行排序的简单教程
May 21 Python
django限制匿名用户访问及重定向的方法实例
Feb 07 Python
Flask模拟实现CSRF攻击的方法
Jul 24 Python
Python之inspect模块实现获取加载模块路径的方法
Oct 16 Python
python2与python3中关于对NaN类型数据的判断和转换方法
Oct 30 Python
python实现的MySQL增删改查操作实例小结
Dec 19 Python
Mac安装python3的方法步骤
Aug 09 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
Apr 24 Python
Pycharm配置lua编译环境过程图解
Nov 28 Python
自动在Windows中运行Python脚本并定时触发功能实现
Sep 04 Python
Python 恐龙跑跑小游戏实现流程
Feb 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
Symfony2学习笔记之系统路由详解
2016/03/17 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
2019/08/12 PHP
PHP实现简单日历类编写
2020/08/28 PHP
PHP isset()及empty()用法区别详解
2020/08/29 PHP
ECMAScript 基础知识
2007/06/29 Javascript
基于jquery的地址栏射击游戏代码
2011/03/10 Javascript
浅析JavaScript中的类型和对象
2013/11/29 Javascript
document.execCommand()的用法小结
2014/01/08 Javascript
jquery form 加载数据示例
2014/04/21 Javascript
$.each遍历对象、数组的属性值并进行处理
2014/07/18 Javascript
带有定位当前位置的百度地图前端web api实例代码
2016/06/21 Javascript
[原创]jQuery常用的4种加载方式分析
2016/07/25 Javascript
BootStrap 超链接变按钮的实现方法
2016/09/25 Javascript
使用 bootstrap modal遇到的问题小结
2016/11/09 Javascript
详解用原生JavaScript实现jQuery的某些简单功能
2016/12/19 Javascript
webpack下实现动态引入文件方法
2018/02/22 Javascript
详解js实时获取并显示当前时间的方法
2019/05/10 Javascript
微信公众号平台接口开发 菜单管理的实现
2019/08/14 Javascript
vue按需加载实例详解
2019/09/06 Javascript
[02:04]完美世界城市挑战赛秋季赛报名开始 谁是solo路人王?
2019/10/10 DOTA
python cookielib 登录人人网的实现代码
2012/12/19 Python
开始着手第一个Django项目
2015/07/15 Python
Python SQL查询并生成json文件操作示例
2018/08/17 Python
详解Python Qt的窗体开发的基本操作
2019/07/14 Python
夜大毕业生自我鉴定
2013/10/31 职场文书
家佳咖啡店创业计划书
2013/12/27 职场文书
小学生学雷锋演讲稿
2014/04/25 职场文书
道德大讲堂实施方案
2014/05/14 职场文书
党的群众路线教育实践活动心得体会(医院)
2014/11/03 职场文书
2014年乡镇人大工作总结
2014/11/25 职场文书
导游欢送词
2015/01/31 职场文书
2015年度护士个人工作总结
2015/04/09 职场文书
环境卫生标语
2015/08/03 职场文书
五年级语文教学反思
2016/03/03 职场文书
Django中session进行权限管理的使用
2021/07/09 Python
openEuler 搭建java开发环境的详细过程
2022/06/10 Servers