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命令行参数解析OptionParser类用法实例
Oct 09 Python
在Docker上开始部署Python应用的教程
Apr 17 Python
Python正则表达式使用经典实例
Jun 21 Python
python人民币小写转大写辅助工具
Jun 20 Python
numpy.std() 计算矩阵标准差的方法
Jul 11 Python
解决python3捕获cx_oracle抛出的异常错误问题
Oct 18 Python
python list格式数据excel导出方法
Oct 31 Python
Django 表单模型选择框如何使用分组
May 16 Python
图文详解python安装Scrapy框架步骤
May 20 Python
Django项目创建及管理实现流程详解
Oct 13 Python
Python爬虫基础初探selenium
May 31 Python
python微信智能AI机器人实现多种支付方式
Apr 12 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/06/09 PHP
PHP添加Xdebug扩展的方法
2014/02/12 PHP
Laravel + Elasticsearch 实现中文搜索的方法
2020/02/02 PHP
jQuery EasyUI API 中文文档 - PropertyGrid属性表格
2011/11/18 Javascript
window.requestAnimationFrame是什么意思,怎么用
2013/01/13 Javascript
JS调试必备的5个debug技巧
2014/03/07 Javascript
javascript匿名函数应用示例介绍
2014/03/07 Javascript
javascript实现自动填写表单实例简析
2015/12/02 Javascript
Select2.js下拉框使用小结
2016/10/24 Javascript
jquery 追加元素append、prepend、before、after用法与区别分析
2016/12/02 Javascript
JS实现搜索框文字可删除功能
2016/12/28 Javascript
JS 在数组指定位置插入/删除数据的方法
2017/01/12 Javascript
详解vue-cli中的ESlint配置文件eslintrc.js
2017/09/25 Javascript
Node解决简单重复问题系列之Excel内容的获取
2018/01/02 Javascript
JS中Promise函数then的奥秘探究
2018/07/30 Javascript
微信小程序上传文件到阿里OSS教程
2019/05/20 Javascript
解决使用layui的时候form表单中的select等不能渲染的问题
2019/09/18 Javascript
Vue实现简单购物车功能
2020/12/13 Vue.js
python追加元素到列表的方法
2015/07/28 Python
Python中类的初始化特殊方法
2017/12/01 Python
python使用tcp实现局域网内文件传输
2020/03/20 Python
Python入门基础之数字字符串与列表
2021/02/01 Python
米兰网婚纱礼服法国网上商店:Milanoo法国
2016/08/20 全球购物
We Fashion荷兰:一家国际时装公司
2018/04/18 全球购物
课改先进个人汇报材料
2014/01/26 职场文书
地理教师岗位职责
2014/03/16 职场文书
学前班评语大全
2014/05/04 职场文书
李敖北大演讲稿
2014/05/24 职场文书
感恩教师节演讲稿
2014/09/03 职场文书
二手车转让协议书
2015/01/29 职场文书
幼儿园中班个人总结
2015/02/28 职场文书
2015年暑期社会实践活动总结
2015/03/27 职场文书
高考百日冲刺决心书
2015/09/23 职场文书
导游词之河北邯郸
2019/09/12 职场文书
CSS巧用渐变实现高级感背景光动画
2021/12/06 HTML / CSS
美元符号 $
2022/02/17 杂记