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文件和目录操作方法大全(含实例)
Mar 12 Python
在Linux系统上部署Apache+Python+Django+MySQL环境
Dec 24 Python
Python基于回溯法子集树模板解决全排列问题示例
Sep 07 Python
python使用循环打印所有三位数水仙花数的实例
Nov 13 Python
使用k8s部署Django项目的方法步骤
Jan 14 Python
pycharm创建一个python包方法图解
Apr 10 Python
Flask框架重定向,错误显示,Responses响应及Sessions会话操作示例
Aug 01 Python
Pandas0.25来了千万别错过这10大好用的新功能
Aug 07 Python
python多任务之协程的使用详解
Aug 26 Python
Python API自动化框架总结
Nov 12 Python
将python依赖包打包成window下可执行文件bat方式
Dec 26 Python
Django微信小程序后台开发教程的实现
Jun 03 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在Nginx下的配置方法图文教程
2016/02/04 PHP
总结PHP中DateTime的常用方法
2016/08/11 PHP
php 利用socket发送GET,POST请求的实例代码
2020/07/04 PHP
基于jquery的一个简单的脚本验证插件
2010/04/05 Javascript
javascript一个无懈可击的实例化XMLHttpRequest的方法
2010/10/13 Javascript
js模仿windows桌面图标排列算法具体实现(附图)
2013/06/16 Javascript
JS控制弹出新页面窗口位置和大小的方法
2015/03/02 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
2015/09/21 Javascript
javascript中eval解析JSON字符串
2016/02/27 Javascript
JavaScript中获取纯正的undefined的方法
2016/03/06 Javascript
AngularJS全局scope与Isolate scope通信用法示例
2016/11/22 Javascript
webpack+vue2构建vue项目骨架的方法
2018/01/09 Javascript
js和jQuery以及easyui实现对下拉框的指定赋值方法
2018/01/23 jQuery
layui表格checkbox选择全选样式及功能的实例
2018/03/07 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
2019/01/08 Javascript
JS检索下拉列表框中被选项目的索引号(selectedIndex)
2019/12/17 Javascript
python网络爬虫采集联想词示例
2014/02/11 Python
Python中os和shutil模块实用方法集锦
2014/05/13 Python
基于python的Tkinter编写登陆注册界面
2017/06/30 Python
pandas.DataFrame 根据条件新建列并赋值的方法
2018/04/08 Python
Python实现基于PIL和tesseract的验证码识别功能示例
2018/07/11 Python
python:解析requests返回的response(json格式)说明
2020/04/30 Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
2020/06/10 Python
求职信格式范本
2013/11/15 职场文书
开办加工厂创业计划书
2014/01/03 职场文书
大学生职业生涯规划范文
2014/01/08 职场文书
学习雷锋做美德少年寄语大全
2014/04/09 职场文书
大专生求职信
2014/06/29 职场文书
政风行风建设责任书
2014/07/23 职场文书
乡文化站暑期培训方案
2014/08/28 职场文书
2014教师专业技术工作总结
2014/12/03 职场文书
地道战观后感2000字
2015/06/04 职场文书
谢师宴学生致辞
2015/07/27 职场文书
详解如何在Canvas中添加事件的方法
2021/04/17 Javascript
如何开发一个渐进式Web应用程序PWA
2021/05/10 Javascript
python单元测试之pytest的使用
2021/06/07 Python