用Python写了个下载快手视频的小脚本
2020-03-01 10:30
387 查看
最近又重新拾起了,对
python的热情.
贴个地址: https://github.com/d1y/lovepack/blob/master/kuaishou.py
前戏说明
因为我近乎癫狂的喜欢一个女孩三年,算上今年是第四年,但是可悲的我只是鱼塘的一"只"(注意我说的是动词)
我想联系她,我想找到她,但是我发现根本没有她的联系方式, 戏剧性的一幕,我有她的快手,所以每天都只有对着快手目睹佳人
但是我并不喜欢快手,这让我有点难堪,所以当时我就觉得做一个小玩意,用来下载他的视频和图片
技术相关
第一次有这个想法的时候,我在考虑用什么技术,
nodejs|
php|
python都可以
最终我考虑选择使用
python来写这个小玩意.
我开始考虑从抓包手机端出手,但是发现这货的接口要研究好久,网上也没有现成的轮子,我就考虑在
web端去抓取
哦,后面的
ID需要传值
_api = 'https://live.kuaishou.com/profile/'
_headers = {
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
}
_r = requests.get(_api+id, headers=_headers)
[/code]
在这里有一个小坑,如果你不传递
userAgent就无法获取到内容
当拿到了
html片段之后,就可以拿到想要的东西了
当然了,我一开始想要正则式的方式拿到需要的东西,我就花了几天的时间去学习这个
有点东西,我放弃了,最后采用的方案是使用:
pyquery而不是使用
bs4
from pyquery import PyQuery as pq
[/code]
仔细的研究了一下这个
web端口, 发现它这个
fontsc用的太狠了
我就不下手了
我开始细细研究这些数据该怎么拿到,在我查看源码的时候我发现一个小东西
大部分数据都在这个对象里,当然这时候就要看一下这个对象到底是什么玩意了~
window.__APOLLO_STATE__ = {
"defa...":{}
}
[/code]
细节部分就不给大家看了,就给大家看看我是怎么解决的:
import json
from pyquery import PyQuery as pq
def str2JSON( html, flag = False ):
'''
@tips { 先把拿到的数据转为`dict` }
@param {str} - html
@return {dict}
'''
_html = pq(html)
_con = _html('#app').next().next().text()
_firstStr = _con.index('{')
_lastStr = _con.rindex('}')
_code = _con[_firstStr:_lastStr]
_code = _code[: int( _code.rindex('}') )+1]
data_obj = json.loads(_code)['defaultClient']
if flag:
_title = _html('.profile-user-name').text()
return {
"title": _title,
"data": data_obj
};
return data_obj;
[/code]
这样就拿到了
python的一个
dict,但是在拿到了
dict之后,我们该怎么做呢?
当然是找到它的作品的
key
通过分析,格式大致为:
_key = '$ROOT_QUERY.publicFeeds({"count":24,"pcursor":"","principalId":"'+id+'"})'
[/code]
她的每一个作品那么就分别为:
data_obj = str2JSON(_r.text)
_lists = data_obj[_key]
_result = [];
for _index,_list in enumerate(_lists['list']):
_now = _key + '.list.' + str(_index)
_result.append(
data_obj[_now]
)
[/code]
非常好,那么现在我们就拿到了作品的
list,现在我们写一个小循环来依次下载
for list in lists:
_lists = list['imgUrls']['json'] # 注意这里!
for i,img in enumerate(_lists):
pass
[/code]
如果你是跟着我的节奏来的话,到这里就应该出问题了,第一就是她的数据类型有几种
- video - 就是视频
- other - 其他
通过观察发现
video资源还通过访问其他
url才能获取到,所以这里要判断他们的类型,下面是伪代码:
type = 'video'
if (type == 'video'):
pass
else:
pass
[/code]
还有就是你会发现拿到的图片是
.webp格式,这格式是
chrome的,有点小众,你得把它转换成
.jpg这就要用到著名的
PIL,下面是伪代码
from PIL import Image
_im = Image.open(_file).convert('RGB')
_im.save( _now, 'jpeg' )
os.unlink(_file)
[/code]
把
.webp文件创建,然后通过这个包转换,接下来就删除
.webp这个文件,嗯,对,这是正确姿势
接下来就到了说说视频怎么下载了
看到了吗,后面的那个
did不要管,你会发现有两个超乱的字符串,相信你通过观察也能看出来这个第一个乱码就是 用户的
id乱码,后面那个就是作品的
id
你肯定想问这货从哪里得知,其实很简单
简单吧
fuck_str = 'User:xjkfljdslkjdfjds'
result = fuck_str.split(':')[1]
[/code]
后面的拿到视频链接就不用我说了吧!
分享完咯~
用法
用法很简单
在你拿到对方的
id之后, 你可以传入
--id=xxx' 这样,这里说一下 ``--flag这个参数是用来生成用户的
.md文件的, 还有
--debug参数是用来测试的
注意啊, 所有生成的文件是在
~/lovepack下面的, 此处的
~表示为
HOME PATH
转载于:https://www.cnblogs.com/kozo4/p/11350741.html
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- Python脚本下载今日头条视频(附加Android版本辅助下载器)
- 分享一个bilibili视频下载的方法,并使用python脚本重命名
- Python脚本下载今日头条视频(附加Android版本辅助下载器)
- 分享一个Python下载视频脚本
- 快手视频下载脚本
- Python脚本下载今日头条视频(附加Android版本辅助下载器)
- Python脚本下载今日头条视频(附加Android版本辅助下载器)
- python批量操作Linux服务器脚本,key登录(执行命令、上传、下载)(二)
- 基于Python SimpleHTTPServer.py的修改脚本:HTTP文件服务器,修正中文目录列表,支持视频文件在线播放
- python批量下载抖音视频
- Python 下载网络mp4视频资源
- python视频教程大全集下载啦
- 用python写网络爬虫-下载百思不得姐视频
- 批量下载豆瓣相册图片python脚本
- python(you-get):2分钟快速下载网站视频
- 网页版快手视频去水印下载工具
- Python爬虫实战 破解爱奇艺vip 获得真实下载地址,下载视频
- python爬虫公众号所有信息,并批量下载公众号视频
- 使用python脚本下载www.wuxia.net.cn上的书籍,并且将它们合并成一个文件
- 用bash脚本下载ku6网视频