手机网页抓取视频(如何破解快手APP的代码才能知晓代码的才能掌握?)

优采云 发布时间: 2021-10-15 06:39

  手机网页抓取视频(如何破解快手APP的代码才能知晓代码的才能掌握?)

  一.配置fiddler和手机

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

  二.抓包

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

  

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

  

  回到Fiddler,看上一个包的header(Fiddler右上角窗口),上面有一个url,复制到浏览器你会发现打开的json界面和下面的不一样Fiddler 的右上角,但是服务器很忙,因为这个 url 是不完整的。注意右上角窗口的最后一行有一个“type=......”。这实际上是完整网址的后半部分。必须拼接在POST url第一行后面,并用&连接。复制完整的url到浏览器,得到类似Fiddler右下窗口的内容(不完全一样,因为视频内容会更新),ok

  

  

  观察“type=...”一串字符,可以多抓几个包比较,发现后面count的个数不同,也就是每个json收录的视频个数不同。平均每个 json 收录 20 个视频下载链接。页后面的数字代表页数。快手接口一直往下掉,过一会又来一个包。可以发现页面后面的数字在增加。__NStokensig 和 sig 后面是一串不规则的数字,只有破解快手 APP 的密码才能知道。所以无法掌握每个json的url变化规律,所以如果要抓20个以上的视频,只能在快手app页面向下滑动,抓包,

  代码:

  #!/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='http://api.ksapisrv.com/rest/n/feed/hot?isp=CTCC&pm_tag=&mod=Meizu%28m3%20note%29&lon=113.968423&country_code=cn&kpf=ANDROID_PHONE&extId=92fa9b653b19ecd11e0840d87c04822c&did=ANDROID_e1b34c4ac9ddf120&kpn=KUAISHOU&net=WIFI&app=0&oc=MEIZU&ud=0&hotfix_ver=&c=MEIZU&sys=ANDROID_7.0&appver=6.3.3.8915&ftt=&language=zh-cn&iuid=&lat=22.583945&did_gt=1556199685379&ver=6.3&max_memory=256&type=7&page=1&coldStart=false&count=20&pv=false&id=25&refreshTimes=2&pcursor=&source=1&needInterestTag=false&browseType=1&seid=8dae8f66-01cf-4580-b703-41e6b563d775&volume=0.0&client_key=3c2cd3f3&os=android&sig=518db63518ffba8fca5c70724750dc95'

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',

'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 list:

pprint.pprint(info)

print('描述%s'%info['caption'])

print('视频连接%s'%info['main_mv_urls'][0]['url'])

print('作者%s'%info['user_name'])

print('id%s'%info['user_id'])

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

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

if __name__ == '__main__':

ks=Kuaishouspider()

ks.kuaishou_request()

  代码

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线