如果看到特别感兴趣的抖音vlogger的视频,想全部dump下来,如何操作呢?下面介绍介绍如何使用python导出特定用户所有视频信息

抓包分析

Chrome Deveploer Tools Chrome 浏览器开发者工具

在抖音APP端,复制vlogger主页地址, 比如: http://v.douyin.com/kGcU4y/ , 在PC端用chrome浏览器打卡,并模拟手机,这里选择iPhone, 然后把复制的主页地址,放到浏览器进行访问,页面跳转到 https://www.iesdouyin.com/share/user/110677980134

下拉主页, 选择Network=>XHR 选项卡, 看到类似请求

:authority: www.iesdouyin.com

:method: GET

:path: /web/api/v2/aweme/post/?user_id=110677980134&sec_uid=&count=21&max_cursor=1561112910000&aid=1128&_signature=3Xf-nxAQgGfUO4SKisB.Ld13.o&dytk=061ae6e81229e178146aa674327eba89

:scheme: https

accept: application/json

accept-encoding: gzip, deflate, br

accept-language: zh-CN,zh;q=0.9,en;q=0.8,ja;q=0.7,zh-TW;q=0.6,da;q=0.5

cookie: tt_webid=6690145457198417412; _ga=GA1.2.605400954.1557670882; _ba=BA0.2-20181226-5199e-GIJXgXk9ajNkyFhmv7Wy; _gid=GA1.2.1914501522.1562857517

referer: https://www.iesdouyin.com/share/user/110677980134

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

x-requested-with: XMLHttpRequest

返回数据截图

通过分析ajax请求的URL https://www.iesdouyin.com/web/api/v2/aweme/post/?user_id=110677980134&sec_uid=&count=21&max_cursor=1559299764000&aid=1128&_signature=3Xf-nxAQgGfUO4SKisB.Ld13.o&dytk=061ae6e81229e178146aa674327eba89 得出请求参数主要包含:

字段

类型

说明

user_id

int

抖音账号的ID

count

int

返回的数据条数,就用默认值21

max_cursor

int

请求的游标,每次请求带上上次请求返回的max_cursor

aid

int

使用默认值11128

_signature

string

每次请求带上的参数签名

dytk

string

每次请求带上的一个参数

参数的获取方法:

https://www.iesdouyin.com/share/user/110677980134

(function() {

$(function(){

__M.require('douyin_falcon:page/reflow_user/index').init({

uid: "110677980134",

dytk: '061ae6e81229e178146aa674327eba89'

});

});

})();

通过正则获取到此参数

_signature 获取比较复杂,抖音对前端的js代码进行了混淆压缩,不易直接分析出算法过程,不过可以执行签名算法代码,并返回对应的签名结果。

执行js代码的可以使用nodejs或者selenium webdriver,这里推荐使用selenium webdriver , nodejs的js执行环境与浏览器有区别,计算出的签名结果,并不能通过验证,selenium webdriver 可以调用本地浏览器,计算出的签名可以跟浏览器直接访问访问计算出的签名一致。

格式化之后的js代码,点击查看, 执行js方法 _bytedAcrawler.sign("110677980134") 对参数进行签名

代码实现导出主页视频列表

def get_user_video_list_by_uid(user_id, cursor=0):

url = 'https://www.iesdouyin.com/web/api/v2/aweme/post/?'

sign, dytk = signature(user_id)

tk_logger.info("sign:%s,dytk:%s" % (sign, dytk))

if sign is None or dytk is None:

tk_logger.log("sign [%s] or dytk [%s] is none" % (sign, dytk))

return None

headers = dict_merge(CHROME_HEADER, {

"Accept": "application/json",

"X-Requested-With": "XMLHttpRequest",

})

params = {

"user_id": user_id,

"count": "21",

"max_cursor": cursor,

"aid": "1128",

"_signature": sign,

"dytk": dytk

}

res = requests.get(url, headers=headers, params=params)

tk_logger.info("request url: %s" % res.url)

content = res.content.decode("utf8")

jsn = json.loads(content)

return jsn

获取的视频列表信息

获取视频信息代码片段

def get_video_detail_by_id(video_id):

url = "https://aweme-hl.snssdk.com/aweme/v1/aweme/detail/?version_code=6.5.0&pass-region=1&pass-route=1&js_sdk_version=1.16.2.7&app_name=aweme&vid=9D5F078E-A1A9-4F64-81C7-F89CA6A3B1DC&app_version=6.5.0&device_id=34712926793&channel=App%20Store&mcc_mnc=46011&aid=1128&screen_width=750&openudid=263bd93f02801d126ca004edccbff8f6e1b19f51&os_api=18∾=WIFI&os_version=12.3.1&device_platform=iphone&build_number=65014&device_type=iPhone9,1&iid=74239983401&idfa=F39B285A-4B4F-4874-9D7E-C728A892BF6D"

data = {"aweme_id": video_id}

headers = {

"sdk-version": "1",

"x-Tt-Token": "00fc1e7950db67b5f43a312e9265cdfee513ea70c36d918c871f3bb553347f3db50ffca143b8722327b345816a75efca071d",

"User-Agent": "Aweme 6.5.0 rv:65014 (iPhone; iOS 12.3.1; en_CN) Cronet",

"Content-Type": "application/x-www-form-urlencoded",

"Cookie": "tt_webid=6636348554880222728; __tea_sdk__user_unique_id=6636348554880222728; odin_tt=76d9b82d6e6f2ddfc99719a5b5d44a7d703cf977f0f7bddf8537f93920d57cb9ec33162ee47868b760f6b09e69209bb2f90bad220b75678af850a0dfa9f056e2; install_id=74239983401; ttreq=1$dab0516952a4157c0c11d4993533c09d6e45fc94; sid_guard=fc1e7950db67b5f43a312e9265cdfee5%7C1559955316%7C5184000%7CWed%2C+07-Aug-2019+00%3A55%3A16+GMT; uid_tt=0afcb06309f632d872799ec0ac3b2c80; sid_tt=fc1e7950db67b5f43a312e9265cdfee5; sessionid=fc1e7950db67b5f43a312e9265cdfee5",

"X-Khronos": "1559956401",

"X-Gorgon": "8300000000002e40eee38cad71d14037bd1385d18bc973f094f5",

}

ret = {}

res = requests.post(url, data=data, headers=headers)

if res.status_code == 200:

# tk_logger.info("video detail raw:%s" % res.content.decode("utf8"))

jsn = json.loads(res.content)

detail = jsn.get("aweme_detail", {})

video_info = get_video_info(detail)

user_info = get_user_info(detail)

play_addr = get_play_address(detail)

video_cover = get_video_cover(detail)

ret["video_info"] = video_info

ret["user_info"] = user_info

ret["play_addr"] = play_addr

ret["video_cover"] = video_cover

else:

raise TKException("get video detail failed [%s][%d]" % (url, res.status_code))

return ret

下载视频代码片段

detail = get_video_detail_by_id(video_id)

def download_video(detail):

url = detail.get("play_addr", {}).get("url_list", [])

if len(url) == 0:

raise TKException("cannot get video url list [%s]" % detail)

url = url[0]

folder = DOWNLOAD_DIR + '/' + detail.get('user_info', {}).get("uid", "unknown")

if not os.path.exists(folder):

os.mkdir(folder)

video_id = detail.get('video_info', {}).get('statistics', {}).get('aweme_id')

# filename = "%s/%s" % (folder, detail.get("video_info", {}).get("desc", video_id) + ".mp4")

filename = "%s/%s" % (folder, video_id + ".mp4")

tk_logger.info("download video %s" % url)

if os.path.isfile(filename):

file_size = get_remote_file_size(url)

if file_size == os.path.getsize(filename):

tk_logger.info("file already downloaded, skip ...")

return

else:

tk_logger.info("download file , file size:%d" % file_size)

res = requests.get(url, headers=IOS_HEADER)

if res.status_code == 200:

with open(filename, "wb") as fp:

for chunk in res.iter_content(chunk_size=1024):

fp.write(chunk)

else:

raise TKException("download video [%s] failed [%d]" % (url, res.status_code))

下载视频

总结

以上所述是小编给大家介绍的使用python爬取抖音视频列表信息 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

本文标题: 使用python爬取抖音视频列表信息

本文地址: http://www.cppcns.com/jiaoben/python/265393.html

python爬取抖音用户数据_使用python爬取抖音视频列表信息相关推荐

  1. 利用python爬取58同城简历数据_利用python爬取58同城简历数据-Go语言中文社区

    利用python爬取58同城简历数据 最近接到一个工作,需要获取58同城上面的简历信息(http://gz.58.com/qzyewu/).最开始想到是用python里面的scrapy框架制作爬虫.但 ...

  2. python爬取抖音用户数据_一篇文章教会你用Python抓取抖音app热点数据

    今天给大家分享一篇简单的安卓app数据分析及抓取方法.以抖音为例,我们想要抓取抖音的热点榜数据. 要知道,这个数据是没有网页版的,只能从手机端下手. 首先我们要安装charles抓包APP数据,它是一 ...

  3. python爬取抖音用户数据_「docker实战篇」python的docker-抖音web端数据抓取(19)

    import re import requests import time from lxml import etree def handle_decode(input_data,share_web_ ...

  4. python中texttable库显示实时数据_用Python串口实时显示数据并绘图pyqtgraph

    用Python串口实时显示数据并绘图 使用pyserial进行串口传输 一.安装pyserial以及基本用法 在cmd下输入命令pip install pyserial 注:升级pip后会出现 &qu ...

  5. python 预测任意天后股票数据_在Python中使用LSTM进行股票市场预测

    本文概述 在本教程中, 你将看到如何使用称为长短期记忆的时间序列模型. LSTM模型功能强大, 特别是通过设计保留了长期记忆, 这一点将在以后看到.你将在本教程中解决以下主题: 了解为什么你需要能够预 ...

  6. python 获取表格中的空数据_在python beautifulsoup中获取表格单元格值为空时的文本输出...

    我正在编写一个beauthulsoup/python代码来从html表中获取数据.该表的问题是某些列可能有空白数据(单元格为空).当我运行这段代码时,当它第一次遇到表中的空白单元格时,它会以一个&qu ...

  7. python从csv提取需要的数据_使用Python从文本(CSV文件)中提取数据

    我正在帮助一个狗救助小组分析他们即将被收养的申请.所有应用程序都是通过在线系统输入的,每个应用程序都将获得一个自动生成的表单ID.然后将申请分配给不同的志愿者进行处理. 大多数信息都很简单,我可以使用 ...

  8. python提取excel表中的数据_用python从excel工作表中提取和操作数据

    场景:我正在尝试编写一个python代码,它读取给定文件夹中的所有工作簿,获取每个工作簿的数据并将其放入单个数据帧中(每个工作簿都成为一个数据框,因此我可以单独操作它们).在 问题1:对于此代码,即使 ...

  9. python做上位机读usb数据_使用python实现win10系统和arduino usb串口通信

    前言 arduino有很多可以直接使用的传感器,可以很方便的获取大量的环境数据. 常见的有:温度(室温,冰箱,水箱等场景) 湿度(房间空气湿度,花盆土壤湿度等场景) 声(声控灯,噪音检测,深海测量,医 ...

最新文章

  1. 日记 [2007年01月24日]服务器加强安全
  2. 实验二 二叉树的操作与实现
  3. 计算机网络技术发源于什么,计算机网络基础试题和答案
  4. 什么叫云服务器_什么叫云计算,云计算是什么,最通俗的解释是这样的
  5. 教你分分钟使用Retrofit+Rxjava实现网络请求
  6. mysql查询2个isbn数据,数据库实验二 数据查询
  7. python中的引用,Python里的引用和拷贝
  8. Java9 jar兼容_java9新特性-6-多版本兼容jar包
  9. 双主动桥隔离双向DC-DC变换器(一)摘要、引言
  10. Chrome浏览器的跨域设置----包含新老版本两种设置
  11. 详解无刷直流电机的工作原理
  12. lvm卷的缩减和扩容
  13. 四象限法推导lm曲线_提出研究问题的“四象限法”
  14. 华为云空间兑换码在哪里找_华为云空间
  15. 第一章 ContextCapture 19 基础操作
  16. 【NeurIPS 2019】Yoshua Bengio报告:深度学习系统从1代到2代,未来将朝何处发展?
  17. Java 计算时间差之年龄问题
  18. 【网络篇】第二篇——IP协议与MAC地址详解
  19. 不要陷入「完美主义者」的陷阱,你必须填的坑
  20. linux环境qt输入框不能切换中文输入法是什么原因

热门文章

  1. java获取手机号归属地-爬虫
  2. Python-Sqlalchemy(ORM数据库框架)
  3. java 中文解码_java使用URLDecoder和URLEncoder对中文字符进行编码和解码
  4. XLSX工作表日期转文本变为数字问题解决
  5. FASTJSON性能优化
  6. 2014年10月18日汇顶科技公司笔试记录
  7. 苹果 Mac 系统 查看 显示 文件扩展名 方法 介绍
  8. vostro3070装win7_戴尔3070MT台式机9代CPU装win7系统及bios设置(支持usb)
  9. Ubuntu中SD卡格式化以及写数据
  10. 微信网页授权(前后端)