抖音小姐姐属于你的四种姿势
作 者:煌金的咸鱼
来 源:咸鱼学Python
广而告之:由于此订阅号换了个皮肤,系统自动取消了读者的公众号置顶。导致用户接受文章不及时。您可以打开订阅号,选择置顶(标星)公众号。重磅干货,第一时间送达!
前言
上周看到一个有趣的项目是使用Python+ADB做一个Python 抖音机器人 Douyin-Bot,自动翻页+颜值识别,自动点赞加关注,效果如下图,可以说是非常秀了。
![](/assets/blank.gif)
源码地址:
而我们今天实现的就是批量下载抖音视频,结合上面的机器人可以说是机器人届的蒂花之秀。
今天我们实现的抖音爬虫主要有下面四点功能:
根据抖音号下载用户发布的全部视频
根据链接自动下载用户点赞的视频
根据链接自动下载某个主题下的全部视频
根据链接自动下载某个音乐下的全部视频
废话说多了,先上一波爬取的结果:
![](/assets/blank.gif)
下载视频截图
![](/assets/blank.gif)
输出日志截图
实战
引入类库
import requests
import json
import datetime
import re
import sys
import os
from urllib.parse import urlencode
from contextlib import closing
from requests.packages import urllib3
import random
本次代码的主要功能模块如下:
![](/assets/blank.gif)
这次的项目主要是根据用户分享的链接自动下载,首先我们通过分享得到下面的链接:
# 这是用户主页的分享链接
https://www.douyin.com/share/user/61806758871/?share_type=link&from=singlemessage
# 这是音乐界面的分享链接
https://www.iesdouyin.com/share/music/6562721743650491139?timestamp=1528546868&utm_source=weixin&utm_campaign=client_share&utm_medium=android&app=aweme&iid=33943329942
# 这是主题界面的分享链接
https://www.iesdouyin.com/share/challenge/1602334725005380?timestamp=1528546923&utm_source=weixin&utm_campaign=client_share&utm_medium=android&app=aweme&iid=33943329942
根据上面的链接我们可以得到以下代码,并且获得唯一的ID标识
# 解析文件里面读取出来的链接
def parse_url(urls): musics_id = [] challenges_id = [] users_id = [] for i in range(len(urls)): url = urls[i] if url: # 分析链接是音乐链接 if re.search('share/music',url): music_id = re.findall('share/music/(.*)\?', url) # if len(musics_id): musics_id.append(music_id[0]) for music in musics_id: print(music) if music not in os.listdir(): os.mkdir(music) download_music_media(music) # 分析链接是主题链接 if re.search('share/challenge', url): challenge_id = re.findall('share/challenge/(.*)\?',url) challenges_id.append(challenge_id[0]) for challenge in challenges_id: if challenge not in os.listdir(): os.mkdir(challenge) # print(challenge) download_challenge_media(challenge) # 分析链接是用户主页,请求下载的是用户喜欢的视频 if re.search('share/user', url): user_id = re.findall('share/user/(.*)/\?',url) users_id.append(user_id[0]) for u_id in users_id: if u_id not in os.listdir(): os.mkdir(u_id) # print(challenge) download_ulike_media(u_id)
我们通过浏览器打开上面的链接可以获得以下的Headers信息:
headers = { 'user-agent':random.choice(hds), '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'
}
我们以第二个获取点赞视频为例,打开我们分享的链接,将开发者模式调整成手机版,点击「喜欢」可以看到请求的链接,如下图:
![](/assets/blank.gif)
查看请求链接
![](/assets/blank.gif)
获得请求参数
可以看到请求的参数中有一个很奇怪的参数_signature,且每次请求这个参数都不同,通过查阅gayhub上相关项目资料,发现这个参数是链接中的ID号加密获得,所以接下来可以通过调用加密JS对ID加密,就可以构建一个完整的请求。代码如下:
# 构建请求参数
def download_ulike_media(u_id): p = os.popen('node fuck-byted-acrawler.js %s' % u_id) signature = p.readlines()[0] params = { 'user_id': str(u_id), 'count': '21', 'max_cursor': '0', 'aid': '1128', '_signature': signature }
可以看到上面调用了node.js来执行加密js,所以我们需要安装NODE.JS。
![](/assets/blank.gif)
我们通过查看返回的数据,可以发现正确视频的链接形式如下:
https://www.amemv.com/share/video/xxxxxxxxxxx
在这里我们可以获得视频的id就可以构建完整的视频链接。代码如下:
# 拼接视频信息 def get_ulike_url(max_cursor=None, video_count=0): video_names = [] video_urls = [] url = 'https://www.amemv.com/share/video/' if max_cursor: params['max_cursor'] = str(max_cursor) ulike_url = 'https://www.douyin.com/aweme/v1/aweme/favorite/?' + urlencode(params) # print(ulike_url) res = requests.get(ulike_url, headers=headers, verify=False) ulike_ms = json.loads(res.content.decode('utf-8')) favorite_list = str(ulike_ms['aweme_list']) v_id = re.findall('https://www.amemv.com/share/video/(.*?)\'',favorite_list) for l in v_id: share_desc = l + '.mp4' s_url = url + l video_names.append(share_desc) video_urls.append(s_url) parse_media_url(video_names, video_urls, u_id) if ulike_ms.get('has_more') == 1: return get_ulike_url(ulike_ms.get('max_cursor'), video_count) video_count = get_ulike_url() if video_count == 0: print('这个用户没有喜欢的视频')
我们点击我们上面构建的视频链接,看下页面的具体情况是什么样的。
![](/assets/blank.gif)
查看网页返回的信息
我们打开上图红框中的链接,可以看到是视频的资源地址。
![](/assets/blank.gif)
打开源视频地址
按照上述的思路,我们可以构建以下的代码:
# 下载模块
def _download_video(video_url, path): video_content = get_video_url(video_url) # print(video_content) rec = re.compile(r'class="video-player" src="(.*?)"') pattern = re.compile(r'playwm') downloadwm_url = rec.search(video_content).group(1) # 构建无水印下载链接 download_url = re.sub(pattern, 'play', downloadwm_url) print('正在下载:',download_url, path) with closing(requests.get(download_url, headers=headers, stream=True, verify=False)) as response: chunk_size = 1024 if response.status_code == 200: with open(path, 'wb') as f: for data in response.iter_content(chunk_size=chunk_size): f.write(data) # flush() 方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。 f.flush()
以上就是下载用户点赞视频的代码,相比于其他功能稍微复杂了点,其他功能通过手机抓包就可以获得请求接口,且没有加密参数。本次的项目代码基本类似,这里就以下载音乐视频的代码为例,讲下抓包部分:10行代码实现自动参与抽奖助手抽奖配置好Charles后,打开抖音,通过刷新手机页面,可以看到左边栏的请求链接中有两处链接高亮,Charles截图如下:
![](/assets/blank.gif)
Charles截图
点击开响应的数据可以看到每一个链接,我们只要解析每个链接中share_url中包含的videoid,再带入到API中就可以得到真实的视频地址了。
![](/assets/blank.gif)
解析图中红框中链接包含的videoid
在测试API时强烈建议可以使用Postman来测试链接的可用性,以减少我们请求的参数数量和测试的复杂度。
![](/assets/blank.gif)
测试接口时的部分截图
全部代码较多,就不占用文章篇幅,有需要测试的朋友后台回复「抖音」获取代码文件。「代码测试于2018.6.9」
本文首发自:咸鱼学Python,欢迎点击下方链接关注获取更多干货呦~
推荐阅读
1.
2.
3.
4.
抖音小姐姐属于你的四种姿势相关推荐
- 用 Python 全自动下载抖音小姐姐视频(附源码)
作者:法纳斯特 为什么写这篇文章,主要也是因为看了一篇文章. 「用Python在抖音扒了这些高颜值女神后,突然成了人生赢家」,文中简述了一名工程师利用Python+ADB+鹅厂的AI,一晚上关注了一千 ...
- python爬取无水印抖音小姐姐视频(2018最新,含Pyqt客户端)
各位小伙伴,之前一段时间迷上了抖音小姐姐视频,但是下载的视频都有水印,于是自己用Python 写了个爬取小姐姐视频的工具,大家可以直接拷贝到自己编译器上运行.此外,我还利用pyqt5写了个操作界面,这 ...
- 快手老司机与抖音小姐姐 ,终有一战?
点击"开发者技术前线",选择"星标?" 在看|星标|留言, 真爱 来源:网易科技(ID:tech_163) | 彭丽慧 编辑 | 章剑锋 出品 | 网易科 ...
- 用Google Brain的机器学习项目:Magenta,教神经网络学抖音小姐姐作曲。
先上我们要学习的小姐姐 的美照.. 一.配置环境 1.自己配置环境:python,tensorflow,bazel(编译),java.然后下载magenta(https://github.com/te ...
- 骚操作!用Python自动下载抖音小姐姐
阅读文本大概需要 15 分钟. 1 目 标 场 景 相信大家平时刷抖音短视频的时候,看到颜值高的小姐姐,都有随手点赞关注的习惯. 如果一条条去刷确实很耗时间,如果 Python 能帮忙筛选出颜值高的小 ...
- 用 Python 全自动下载抖音小姐姐视频
(给Python开发者加星标,提升Python技能) 作者:法纳斯特(本文来自作者投稿,简介见末尾) 为什么写这篇文章,主要也是因为看了一篇文章. 「用Python在抖音扒了这些高颜值女神后,突然成了 ...
- 学好Python,为你喜欢的抖音小姐姐疯狂打call
什么是抖音 抖音是2016年9月上线的一款音乐创意短视频社交软件,是一个专注年轻人的15秒音乐短视频社区.用户可以通过这款软件选择歌曲,拍摄15秒的音乐短视频,形成自己的作品. 效果 抖音经常能刷到很 ...
- pyqt5练手项目-抖音小姐姐短视频下载
pyqt5=Python+ qt,这块的资料现在慢慢多起来了,这里给大家送一个小的demo用来练手. 里面技术点: 1)控件 Pushbutton的使用: 2)pyqt5线程的用法; 3)界面和逻辑分 ...
- 21年抓取抖音小姐姐最新版教程!最关键的是无水印下载。这还学不会?
概叙 我想很多人一开始接触爬虫,想学的目的就是抓取某些小姐姐的视频啊,图片啊 或者抓取小说之类的!这个应该是大家想学爬虫的一个动力吧!今天就给大家整一期爬小姐姐视频,本来爬正经视频的,但是想了想,还是 ...
最新文章
- Unity三维游戏开发C#编程大师班 Masterclass In C# Programing Unity 3D Game Development FPS
- 十大问题诠释冯国华缘何入主金蝶
- python递归详解+汉诺塔小案例_汉诺塔,python递归实现解法步骤
- 算法杂货铺——分类算法之贝叶斯网络(Bayesian networks)
- Linux目录、文件的创建与删除
- 包含Iphlpapi.h 编译错误 error C2065: 'HRASCONN'
- 如何使用代码给product创建distribution chain
- 剑桥大学的下午茶,为何能喝出六十位诺贝尔奖获得者?
- 中国象棋程序的设计与实现(六)--N皇后问题的算法设计与实现(源码+注释+截图)...
- 李楠:《流浪地球》抄的经典套路 但这不是贬低
- SAP自学指南:案例公司的概括
- sql主键可以有多个_干货 | 新手请速戳!30个精选SQL面试问题Qamp;A集锦
- Codeforces 758F Geometrical Progression
- Extjs4.0 视频教程
- 旭荣管理软件怎么修改小票内容_水果门店管理系统怎么管理水果门店的
- Kubernetes监控体系(1)-cAdvisor介绍
- c语言整形数组存放字符串,用一维字符数组存放字符串
- 查征信 查婚姻状况 查公开的个人信息 学信网学历学位查询 中国执行信息公开网执行人查询 民办院校学位学历查询 国外学历学位查询方法 征信中心 中国裁判文书查询 查询全国的莆田系医院 企查查 天眼查
- 使用Echarts.js自定义X轴Y轴刻度画网格
- 通过Socket实现群聊的思路