fiddler工具的安装

fiddler 官网地址:https://www.telerik.com/fiddler

进入页面后,点击free download


进入这个页面后,用途的话,根据自己的需要选择就行的。

输入相关的信息,点击下载即可。

fiddler抓包原理


注意:Fiddler 是以代理web服务器的形式工作的,它使用代理地址:127.0.0.1,端口:8888。当Fiddler退出的时候它会自动注销,这样就不会影响别的 程序。不过如果Fiddler非正常退出,这时候因为Fiddler没有自动注销,会造成网页无法访问。解决的办法是重新启动下Fiddler。

配置

打开Fiddler Tool->Fiddler Options->HTTPS

选中"Decrpt HTTPS traffic", Fiddler就可以截获HTTPS请求,第一次会弹出证书安装提示,若没有弹出提示,勾选Actions-> Trust Root Certificate
另外,如果你要监听的程序访问的 HTTPS 站点使用的是不可信的证书,则请接着把下面的 “Ignore servercertificate errors” 勾选上。

fiddler配置

电脑设置

按这样设置好了之后会弹出一个对话框,点确定就好。端口选的8888,要确定该端口没有被占用,若被占用可换一个端口。

手机(模拟器)设置

让手机和电脑处于同一网段,比如让手机和电脑连接同一个WiFi就行。在手机浏览器中输入网址: 电脑IP:端口号。电脑IP可通过cmd窗口查到,如下图,端口号就是上一步设置的8888。所以我的网址是:192.168.1.105:8888

输入网址后跳出如下页面:

点击红框中的连接,会开始下载证书:

证书名称随便写,最后点击确定就好了。安装成功之后通知栏会显示受到不明第三方监控,这样就代表成功啦。

最后一步,到手机的WLAN设置里,点击当前所连接的wifi修改网络,如下图所示:

关于fiddler部分app抓包连不上网

原因一:电脑和手机连接同一个网络,确保在一个局域网。

电脑端查看电脑的ip地址:win+R键 输入cmd 弹出窗口后输入ipconfig

原因二:配置好fiddler后,要进行重启
原因三:关闭电脑的防火墙,杀毒软件
原因四:打开注册表(cmd-regedit),在HKEY_CURRENT_USER\Software\Microsoft\Fiddler2下创建一个DWORD,值置为80(十进制)
编写fiddlerScript rule,

在fiddler菜单栏,点击Rules->Customize Rules,用Ctrl+F查找Lavender方法添加一行代码

if (oSession.host.toLowerCase() == “webserver:8888”)
{
oSession.host = “webserver:80”;

}

设置完之后重启Fiddler即可。

另外,Fiddler可以抓取支持http代理的任意程序的数据包,如果要抓取https会话,要先安装证书。

以上弄完之后就可以开始抓包了

首先确立下步骤

1.先确立抓取目标

2.开始抓包

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

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

打开Actions选择第一个

回到Fiddler,看之前那个包的头(Fiddler右上窗口),上面有个url

在Inspectors中的第一行Post请求中也可以查看(关于Post与get的区别,设计html,这里不再赘述)

可以复制到浏览器会发现打开的不是和Fiddler右下角一样的json界面,而是显示服务器繁忙,因为这个url是不完整的。注意右上窗口最后一行有个user_id=…"这其实是完整url的后半部分,要把它拼接到第一行POST url的后面(HTTP/1.1之前),并且以&连接。把完整的url再复制到浏览器,得到和Fiddler右下窗口类似的内容



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

程序很简单,加了日志功能来记录每个视频的题目和url和下载进度。有时候可能遇到某个下载链接有问题,所以程序可能卡在那里,因为我没有做超时处理,所以这时需要停止程序并修改一下page和video_count的值继续下载。当然这种情况比较少,最后记得每个视频下载完毕用time.sleep()挂起几秒钟,不然访问太快可能会被封哦。

如何批量下载json

系好安全带

选中区域



点击save(保存)–>选择保存格式–>为文本
之后选择路径就可以了

我推荐你们把文件名字改为1.txt

1.txt

1.txt

重要的事情说三遍,这就为我们之后的bat程序打开了关键

OK,同学们划重点

保存之后有什么用呢,

首先

我们再文件的目录中新建一个bat文件
输入代码
可以把 POST http://101.251.217.216/rest/thanos/feed/profile2?
改为你fiddler中的url
但一定要分情况
直截取前半部分POST …/rest/rest/thanos/feed/profile2?
…部分可以更改为你的抓到的网址或者IP 地址

findstr /c:"POST http://101.251.217.216/rest/thanos/feed/profile2?" /c:"user_id="  1.txt>all.txt

之后就会生成一个all.txt
里面就是
这里由于链接没有拼接

所以看好下面操作

这里推荐使用notepad++

打开后,选择替换
将 HTTP/1.1替换成&(HTTP/1.1前有一个空格)
我们替换之后
选择在&的后面按一下Delete键,向前删除
不是Baskspace
这样url就拼接好了

好的,我们已经批量获取了url的链接

接下来的批量下载,我就不赘述了
还是说一下吧,就怕有像我一样的人
这里还是推荐下载工具Internet Download Manager


按图片提示,就可以下载了

好的,下面重重重点来了

获取json文件后如何下载视频,图片,图集呢

如果下面看不懂,可以直接去下载源码(最下面),那个,你还是看完吧,人家好不容易写的,又没有污污的内容,你就看吗。
1

创建一个.gitattributes
(gitattributes老子前面有个.)

# Auto detect text files and perform LF normalization
* text=auto
2

在创建一个_config.yml

theme: jekyll-theme-architect
3

dll文件提供下载地址
gzip.dll.

4

命名为kuaishou.py

#! python3
# -*-coding:utf-8-*-
# author: muyangren907
import json,os,codecs,pprint,re,time,queue,urllib,socket,threading
from urllib.request import urlretrieveitemnum = 0
havedownload = 0
vq = queue.Queue()
def download(vq):while True:# vq.put([caption, photo_id, mv_urls, atlas, cover_urls],path)videomes = vq.get()caption = videomes[0]photo_id = videomes[1]mv_urls = videomes[2]atlas = videomes[3]cover_urls = videomes[4]path = videomes[5]# itemnum = videomes[6]global havedownloadif mv_urls!="None" :downfile = os.path.join(path, str(photo_id)+"_"+caption + ".mp4")   #filename = photo_id+captiontry:urlretrieve(mv_urls,downfile)except IOError:downfile = os.path.join(path, "错误" + '%s.mp4') % photo_idtry:urlretrieve(mv_urls, downfile)except (socket.error, urllib.ContentTooShortError):print("请求被断开,休眠2秒")time.sleep(2)urlretrieve(mv_urls,downfile)havedownload+=1print("(%d/%d)视频下载完成: %s_%s"% (havedownload,itemnum,photo_id,caption))vq.task_done()else:if atlas[0]!="None" :caption = caption.replace(".","。")if os.path.exists(path+"/"+str(photo_id) + "_" + caption) == False:os.mkdir(path+"/"+str(photo_id) + "_" + caption)for atlasindex in range(len(atlas)):atlas_url = atlas[atlasindex]downfile = os.path.join(path+"/"+str(photo_id) + "_" + caption, str(atlasindex) + ".webp")  # filename = atlasindextry:urlretrieve(atlas_url, downfile)except IOError:downfile = os.path.join(path+"/"+str(photo_id) + "_" + caption, "错误" + '%s%s.webp') %(photo_id,atlasindex)try:urlretrieve(atlas_url, downfile)except (socket.error, urllib.ContentTooShortError):print("请求被断开,休眠2秒")time.sleep(2)urlretrieve(atlas_url, downfile)havedownload += 1print("(%d/%d)图集下载完成: %s_%s" % (havedownload,itemnum,photo_id,caption))vq.task_done()else:downfile = os.path.join(path, str(photo_id) + "_" + caption + ".mp4")  # filename = photo_id+captiontry:urlretrieve(cover_urls, downfile)except IOError:downfile = os.path.join(path, "错误" + '%s.mp4') % photo_idtry:urlretrieve(cover_urls, downfile)except (socket.error, urllib.ContentTooShortError):print("请求被断开,休眠2秒")time.sleep(2)urlretrieve(cover_urls, downfile)havedownload += 1print("(%d/%d)图片下载完成: %s_%s" % (havedownload,itemnum,photo_id,caption))vq.task_done()def main():user_name = ""user_id = 0localtime = time.asctime(time.localtime(time.time())) #get time# count numberglobal itemnumvideonum = 0atlasnum = 0picturenum = 0filelist = os.listdir("./")  # get the file listjsonfilename = []for file_index in range(len(filelist)):filestr = str(filelist[file_index])if filestr.find(".json", 0, len(filestr)) != -1:jsonfilename.append(filestr)  # add json file name to jsonfilename listprint("json文件总数为: " + str(len(jsonfilename)))for file_index in range(len(jsonfilename)):jsonfile = open("./"+jsonfilename[file_index],"r",encoding="utf8") #open json filejsonstr = jsonfile.read() #read file to jsonstrjsonobj = json.loads(jsonstr)user_name = jsonobj['feeds'][0]['user_name'].replace("/","")    #get user_nameuser_id = jsonobj['feeds'][0]['user_id']    #get user_id# print(user_name+" "+str(user_id))if os.path.exists("./"+user_name) == False:os.mkdir("./"+user_name)    #mkdir using user_namemv_urls = "None"atlas = ["None"]cover_urls = "None"for item in jsonobj['feeds']:itemnum+=1# pprint.pprint(itme)caption = item['caption']notchar = ["?", "*", "/", "\\", "<", ">", ":", "\"", "|", "\n","\r"," "]  # These characters cannot appear in the file namefor chari in range(len(notchar)):caption = caption.replace(notchar[chari], "")caption = caption[0:29] #file name can't be too longphoto_id = item['photo_id']if 'main_mv_urls' in item :videonum+=1mv_urls = item['main_mv_urls'][0]['url']else :mv_urls = "None"# print(photo_id)if 'atlas' in item["ext_params"] :atlasnum+=1atlas = item["ext_params"]['atlas']['list']for atlas_index in range(len(atlas)):atlas[atlas_index]="http://"+item["ext_params"]['atlas']['cdnList'][0]['cdn']+atlas[atlas_index]  #url=cdn+relative_url# print(atlas[atlas_index])else :picturenum+=1atlas=["None"]cover_urls = item['cover_urls'][0]['url']# print(cover_urls)# print(caption)vq.put([caption,photo_id,mv_urls,atlas,cover_urls,"./"+user_name])# fp =open("./"+user_name+"/"+caption+".txt","w")# fp.close()# print(user_name + str(user_id))jsonfile.close() #close fileprint("itemnum\t"+str(itemnum)+"\nvideonum\t"+str(videonum)+"\natlasnum\t"+str(atlasnum)+"\npicturenum\t"+str(picturenum))if os.path.exists("./" + user_name + "/" + user_name + ".txt") == False:user_mes_file = codecs.open("./" + user_name + "/" + user_name + ".txt", "w","utf-8")user_mes_file.write("download_time\t"+localtime+"\n")user_mes_file.write("user_name\t" + user_name + "\nuser_id\t" + str(user_id) + "\n")user_mes_file.write("itemnum\t"+str(itemnum)+"\nvideonum\t"+str(videonum)+"\natlasnum\t"+str(atlasnum)+"\npicturenum\t"+str(picturenum))user_mes_file.close()threadnum = 32  # thread numberfor thread_num in range(threadnum):t = threading.Thread(target=download,args=(vq,))t.setDaemon(True)t.start()vq.join()# print(str(itemnum)+" "+str(videonum)+" "+str(atlasnum)+" "+str(picturenum))
main()
5

编写一个bat文件

你的python文件路径 kuaishou.py
pause
最后源码奉上

Github:https://github.com/wczzsmmb/CSDNKS.
码云(gitee): https://gitee.com/wczzsmmn/CSDNKS.

python爬取快手app视频(fiddler抓json包实现)相关推荐

  1. 谁说app的视频抓取不了的?用Python爬取整个app视频

    前言 随着手app的发展逐渐强大,我们手机应用每天的生活也是非常的多.那我们怎么知道他的数据是怎么形成的,通过电脑端如何爬取.相信大家也有这样的问题.下面我将讲解这些操作流程. 一.操作流程 首先我们 ...

  2. 使用python爬取最右视频

    最近学习了python,在此记录一下用python爬取最右视频 首先安装mitmproxy,安装方式:pip install mitmproxy 因为我使用的是Windows系统,无法使用mitmpr ...

  3. 以某乎为实战案例,教你用Python爬取手机App数据

    1 前言 最近爬取的数据都是网页端,今天来教大家如何爬取手机端app数据(本文以ios苹果手机为例,其实安卓跟ios差不多)! 本文将以『某乎』为实战案例,手把手教你从配置到代码一步一步的爬取App数 ...

  4. python爬取抖音用户数据_使用python爬取抖音视频列表信息

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

  5. python爬取快手评论信息+快手号

    python爬取快手评论信息+快手号 潦草记录一下思路 从浏览器进行抓包,分析提交参数, 1.从手机中打开快手,找到需要爬取的视频,转发复制链接,从网页中打开 2.按F12进入开发者模式,进行抓包 3 ...

  6. 教你用Python爬取手机App数据!居然有人说爬不了APP

    最近爬取的数据都是网页端,今天来教大家如何爬取手机端app数据(本文以ios苹果手机为例,其实安卓跟ios差不多)! 本文将以『某乎』为实战案例,手把手教你从配置到代码一步一步的爬取App数据! 2. ...

  7. python爬取bilibili弹幕_用Python爬取B站视频弹幕

    原标题:用Python爬取B站视频弹幕 via:菜J学Python 众所周知,弹幕,即在网络上观看视频时弹出的评论性字幕.不知道大家看视频的时候会不会点开弹幕,于我而言,弹幕是视频内容的良好补充,是一 ...

  8. python爬取b站评论_学习笔记(1):写了个python爬取B站视频评论的程序

    学习笔记(1):写了个python爬取B站视频评论的程序 import requests import json import os table='fZodR9XQDSUm21yCkr6zBqiveY ...

  9. python爬b站评论_学习笔记(1):写了个python爬取B站视频评论的程序

    学习笔记(1):写了个python爬取B站视频评论的程序 import requests import json import os table='fZodR9XQDSUm21yCkr6zBqiveY ...

最新文章

  1. SPIEC-EASI的微生物网络构建示例
  2. 【项目管理】项目经理每天、每周、每月应该做的都在这
  3. python3 赋值与内存空间
  4. 实战SSM_O2O商铺_19【商铺编辑】Controller层开发
  5. 2、Keepalived提供日志与双主模型演示
  6. twitter自定义api_为Twitter4j创建自定义SpringBoot Starter
  7. java加载sql2016_SQl Server 2016 with R.
  8. linux 挂载32T文件系统,linux Centos下磁盘分区及文件系统创建与挂载(示例代码)
  9. ROS笔记之使用Python代码实现rosbag info获取bag的信息
  10. delphi 连接DBF
  11. 2021-08-08 mysql索引
  12. CDC相关知识点总结
  13. STM32固件库下载
  14. Java——NIO和IO的区别
  15. 计算机系统 ahci模式,ahci模式,教您怎样开启ahci模式
  16. Createjs的控件 BitMap、MovieClip、Sprite
  17. 用python进行数据分析(二:数据处理)
  18. Adaptive AUTOSAR----Adaptive studio
  19. python面向对象的编程_python面向对象的编程
  20. IDEA默认JDK版本号变成11了

热门文章

  1. Vue 进阶系列丨自定义指令实现按钮权限功能
  2. ideapad710s matlab,使用效果如何呢?联想ideapad 710S评测体验
  3. sony芯片 camera pcb layout注意事项
  4. 华为机试(4)字符串分割
  5. 用高德sdk做一个滴滴司机端的导航
  6. php emoji 判断,php如何判断emoji
  7. stm32cubemx打开头文件路径错误_prt文件右键打开方式没有NX软件的解决方案
  8. windows 系统纯净版官网下载地址
  9. AEG在线式单相UPS系统D.6000
  10. Win10、Win11蓝屏问题查找及修复方法