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 23 Python
初步介绍Python中的pydoc模块和distutils模块
Apr 13 Python
用Python给文本创立向量空间模型的教程
Apr 23 Python
Python提取网页中超链接的方法
Sep 18 Python
python实现分页效果
Oct 25 Python
Python批量更改文件名的实现方法
Oct 29 Python
opencv python统计及绘制直方图的方法
Jan 21 Python
python实现简单日志记录库glog的使用
Dec 13 Python
django使用JWT保存用户登录信息
Apr 22 Python
Python filter()及reduce()函数使用方法解析
Sep 05 Python
Python如何使用logging为Flask增加logid
Mar 30 Python
详解Python中__new__方法的作用
Mar 31 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函数utf8转gb2312编码
2006/12/21 PHP
深入解析php模板技术原理【一】
2008/01/10 PHP
Yii2 assets清除缓存的方法
2016/05/16 PHP
php数组指针操作详解
2017/02/14 PHP
理解Javascript_02_理解undefined和null
2010/10/11 Javascript
40款非常棒的jQuery 插件和制作教程(系列二)
2011/11/02 Javascript
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
2013/04/08 Javascript
JavaScript中prototype为对象添加属性的误区介绍
2013/10/15 Javascript
封装的jquery翻页滚动(示例代码)
2013/11/18 Javascript
jQuery监控文本框事件并作相应处理的方法
2015/04/16 Javascript
jQuery通过Ajax返回JSON数据
2015/04/28 Javascript
JavaScript正则表达式的分组匹配详解
2016/02/13 Javascript
针对后台列表table拖拽比较实用的jquery拖动排序
2016/10/10 Javascript
webpack独立打包和缓存处理详解
2017/04/03 Javascript
vue-cli如何快速构建vue项目
2017/04/26 Javascript
nodejs之get/post请求的几种方式小结
2017/07/26 NodeJs
微信小程序如何加载数据库真实数据的实现
2020/03/04 Javascript
Python 命令行参数sys.argv
2008/09/06 Python
对于Python中RawString的理解介绍
2016/07/07 Python
用python做一个搜索引擎(Pylucene)的实例代码
2017/07/05 Python
python对离散变量的one-hot编码方法
2018/07/11 Python
python正则表达式匹配[]中间为任意字符的实例
2018/12/25 Python
Python GUI自动化实现绕过验证码登录
2020/01/10 Python
python应用Axes3D绘图(批量梯度下降算法)
2020/03/25 Python
用html5实现语音搜索框的方法
2014/03/18 HTML / CSS
详解webapp页面滚动卡顿的解决办法
2018/12/26 HTML / CSS
英国领先的珍珠首饰品牌:Orchira
2016/09/11 全球购物
Old Navy加拿大官网:美式休闲服饰品牌
2017/09/26 全球购物
西班牙Polo衫品牌:Polo Club
2020/08/09 全球购物
年级组长自我鉴定
2014/02/22 职场文书
教师自我剖析材料范文
2014/09/30 职场文书
先进个人事迹材料
2014/12/29 职场文书
故宫的导游词
2015/01/31 职场文书
2015暑假假期总结
2015/07/13 职场文书
PostgreSQL存储过程实用脚本(二):创建函数入门
2021/04/05 PostgreSQL
Python中文分词库jieba(结巴分词)详细使用介绍
2022/04/07 Python