技术心得记录:快手的小视频爬取

简介: 技术心得记录:快手的小视频爬取

一.配置好fiddler和手机


 让手机能够通过fiddler代理访问网络


二.抓包


  打开快手APP,Fiddler会快速显示很多信息,这些都是手机传送或者接收到的信息。可以逐个包点开,以json形式查看是否是我们需要的内容,如下图所示:


  这时可以看到,有一个包里显示了很多信息,包括视频的标题,发布者,再往下拉,发现里面包含很多叫做“main_mv_url"的标签,复制其中一个标签后的url到浏览器,发现浏览器下载了一个mp4格式的视频,点开视频,就是我们需要的。为了让列表中只显示我们需要的包,让视图更清晰,可以用过滤器,只显示URL中含/rest/n/feed/的内容


  回到Fiddler,看之前那个包的头(Fiddler右上窗口),上面有个url,可以复制到浏览器会发现打开的不是和Fiddler右下角一样的json界面,而是显示服务器繁忙,因为这个url是不完整的。注意右上窗口最后一行有个“type=......”这其实是完整url的后半部分,//代码效果参考:http://www.lyjsj.net.cn/wz/art_23681.html

要把它拼接到第一行POST url的后面,并且以&连接。把完整的url再复制到浏览器,得到和Fiddler右下窗口类似的内容(不是完全一样,因为视频内容会更新),ok

  再观察“type=...”这串字符,可以多抓几个包对比一下,发现count后面跟着的数字是不一样的,即每个json里所含视频个数不一样。平均每个json中含有20个视频的下载链接。page后面的数字就代表页数,在快手界面不断的往下滑,隔一小段时间会有另一个包,可以发现page后的数字是递增的。NStokensig和sig后跟的一串数字是没有规律可循的,要破解快手APP的代码才能知晓。所以无法掌握每个json的url变化规律,所以若是要抓取20个以上的视频,只能通过在快手app页面上往下滑动,抓包,copy完整的url到文本文件再用程序进行下载。


代码:


#!/usr/bin/env python


# -- coding: utf-8 --


#author tom


import pprint


import requests


import json


import time


import random


class Kuaishouspider:


#这个是抓包抓到的数据请求url,要和后面的type用&拼接起来


def init(self):


self.url=''


self.headers={


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


'Host': 'api.ksapisrv.com',


'Accept-Language': 'zh-Hans-CN;q=1'


}


#抓包里面的数据


self.data={


'client_key':'3c2cd3f3',


'coldStart':'false',


'count':'20',


'country_code':'cn',


'id':'25',


'language':'zh-Hans-CN;q=1',


'pv':'false',


'refreshTimes':'2',


'sig': '518db63518ffba8fca5c70724750dc95',


//代码效果参考:http://www.lyjsj.net.cn/wz/art_23679.html

'source':'1',

'type':'7'


}


self.count=0


def kuaishou_request(self):


while True:


#用来计数的


self.count+=1


#返回的json数据,我们从里面解析出视频的uerl


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


list=res.json()【'feeds'】


#list里面装着每一个视频的详细信息,包括我们所需要的视频url


for info in //代码效果参考:http://www.lyjsj.net.cn/wx/art_23677.html

list:

pprint.pprint(info)


print('描述%s'%info【'caption'】)


print('视频连接%s'%info【'main_mv_urls'】【0】【'url'】)


print('id%s'%info【'user_id'】)


print('第%s次抓取完成'%self.count)


time.sleep(random.randint(500,700))


if name == 'main__':


ks=Kuaishouspider()


ks.kuaishou_request()


代码

相关文章
|
存储 数据安全/隐私保护
RPMB说明与使用(Replay Protected Memory Block)
RPMB说明与使用(Replay Protected Memory Block)
4290 0
|
数据采集
24年整理! 各大代理商隧道代理IP价格对比,文末有总结
作为日常需要用到大量代理IP的爬虫从业者,分析各大代理商的价格及IP可用率等属于基操了,很多时候我们遵循自己的消费习惯购买产品,被当韭菜收割一波。 于是我打算分析了一下几家常用代理商的价格,顺便有一些日常小tip分享给大家,不能不明不白就当一颗绿油油的小韭菜。
|
存储 Linux 网络安全
借PVE8.0的Debian 12系统配置一下NFS服务器
借PVE8.0的Debian 12系统配置一下NFS服务器
|
安全 网络架构
|
3月前
|
C++
什么是单项式
单项式是代数式中的一种
|
6月前
|
JSON API 数据格式
淘宝商品列表API接口攻略(附代码示例)
淘宝商品列表API接口用于获取淘宝商品信息,支持按关键词、类目、价格区间等条件查询,返回商品标题、价格、销量等数据。通过构造HTTP请求并解析JSON响应,可提取所需信息。示例代码展示了使用Python调用该API的流程,包括生成签名和请求参数配置,方便开发者快速上手。
290 12
|
JSON 监控 安全
JSONP 被劫持后会对用户造成哪些危害?
JSONP 被劫持后可能对用户造成严重的危害,涉及信息安全、财产安全和隐私保护等多个方面。因此,在使用 JSONP 进行跨域数据交互时,必须采取有效的安全措施来防止劫持事件的发生。
291 7
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【10月更文挑战第36天】本文将引导您探索Node.js的世界,通过实际案例揭示其背后的原理和实践方法。从基础的安装到高级的异步处理,我们将一起构建一个简单的后端服务,并讨论如何优化性能。无论您是新手还是有经验的开发者,这篇文章都将为您提供新的视角和深入的理解。
|
Web App开发 JSON JavaScript
爬取王者荣耀图片
【10月更文挑战第11天】爬取王者荣耀图片。
888 2
|
数据采集 缓存 IDE
Go中遇到http code 206和302的获取数据的解决方案
文章提供了解决Go语言中处理HTTP状态码206(部分内容)和302(重定向)的方案,包括如何获取部分数据和真实请求地址的方法,以便程序员能快速完成工作,享受七夕时光。
937 0
Go中遇到http code 206和302的获取数据的解决方案