python3 爬虫实战:mitmproxy 对接 python 下载抖音小视频

 

From:https://blog.csdn.net/Fan_shui/article/details/81461253

 

 

一、前言

 

前面我们已经用 appium 爬取了微信朋友圈,今天我们学习下 mitmproxy,mitmproxy 是干什么的呢,它跟 charles 和 fiddler类似,是一个抓包工具,以控制台的形式显示,mitmproxy 的重要性在于它可以对接 python,可以通过 python 处理抓包的数据。试想一下我们如果不用 mitmproxy,用 fiddler 抓取抖音的视频地址,我们可以抓到视频的地址,这些地址要是可以直接用requests 缓存下来就好了,mitmproxy 就派上用场了。

知乎:python3爬虫(三):mitmproxy下载抖音小视频:https://zhuanlan.zhihu.com/p/41492085
GitHub:https://github.com/FanShuixing/git_webspider

 

 

二、学习目标

 

可以根据抖音号和抖音名称爬取到对应的抖音小视频

 

 

三、学习资料(感谢分享)

 

崔大的mitmproxy安装教程:https://cuiqingcai.com/5391.html
抖音教程:https://blog.csdn.net/mp624183768/article/details/80956368
fiddler的使用:https://blog.csdn.net/c406495762/article/details/76850843

 

 

四、mitmproxy的安装

 

请先按照崔大的mitmproxy的安装 进行安装和证书的配置,如果安卓证书安装有问题,可以参看下面(华为手机,应该普遍适用):
把文件复制到手机qq后,可以在文件管理的下载中查看qq文件

第一个是我们下载的证书,长按后勾上它

点击下面的菜单,查看详情,这样可以看见这个证书的具体位置,一会有用

电脑打开360WiFi后,手机连接上360WiFi,在WiFi里面的菜单

 

安装证书就需要找到证书的位置,这样刚才我们在文件管理里面看到的位置就可以在这儿用到,找到证书安装即可。

配置代理
证书安装完成后,要配置手机和电脑处在同一个局域网内,我建议用360wifi,其它wifi应该也可以,但是最好不要用自己家路由器的wifi,我家wifi测试的时候没成功,360WiFi才成功了的。 

如果弄完之后,在cmd中输入mitmdump,在手机中打开浏览器看看有没有网络,看看电脑的控制台有没有输出抓取信息,如果有,恭喜你安装成功。如果没有,憋着急,看看我的办法能不能帮助你:

建议:弄完后我发现手机浏览器中打不开网页,qq和微信是有网络的,我重新安装了一下mitmproxy,不过不是用pip安装,而是直接下载的 安装文件:https://github.com/mitmproxy/mitmproxy/releases, 选择个exe就行 

安装好后,查看安装路径下的bin文件夹,里面有个mitmdump.exe,双击它打开代理服务,这个时候再在手机上刷新网页发现mitmdump有请求输出。

 

 

五、用fiddler分析接口

 

不知道大家用 fiddler不,我抓包更喜欢用它,方便简洁,mitmdump 的唯一优势是可以对接 python,但是我感觉它不好分析呀,所以我是把 fiddler开着,分析下接口,再用mitmdump对接python,fiddler我就不介绍了。
网上教程很多,可以参看:https://blog.csdn.net/c406495762/article/details/76850843(博主大大写的超棒)

我们在手机中打开上图中的页面后,在fiddler中会发现,有一个这样的网址被抓取到

它的json数据中有视频信息

打开aweme_list中的一个{},里面是一个视频的信息,有对视频的描述,也有用户的id,也有video的url

url_list里面的url就是视频的url,随便选一个就是了。

 

 

六、对接python

 

# douyin_t.py
import jsondef response(flow):url = 'https://api.amemv.com/aweme/v1/aweme/post/'# 筛选出以上面url为开头的url if flow.request.url.startswith(url):text = flow.response.text# 将已编码的json字符串解码为python对象 data = json.loads(text)print(data)

我把代码保存在了D:\my-python-run\web spider目录下,所以我得先到这个目录下,这样mitmdump才能找到我的python脚本,然后运行命令 mitmdump -s douyin_t.py

在手机上打开抖音,搜索到你想下载的用户的抖音主页

可以发现mitmdump有数据输出

接下来我们只需提取视频的url,并缓存视频到本地

# douyin_t.py
import json, osdef response(flow):url = 'https://api.amemv.com/aweme/v1/aweme/post/'# 筛选出以上面url为开头的urlif flow.request.url.startswith(url):text = flow.response.text# 将已编码的json字符串解码为python对象data = json.loads(text)# print(data)# 在fiddler中刚刚看到每一个视频的所有信息 # 都在aweme_list中 video_url = data['aweme_list']path = 'E:/爬虫数据/douyin'if not os.path.exists(path):os.mkdir(path)for each in video_url:# 视频描述 desc = each['desc']url = each['video']['play_addr']['url_list'][0]print(desc, url)

运行如下:

现在只需要用requests把这些url缓存到本地,首先要导入requests库

# douyin_t.py 
import json, os
import requestsdef response(flow):url = 'https://api.amemv.com/aweme/v1/aweme/post/'# 筛选出以上面url为开头的url if flow.request.url.startswith(url):text = flow.response.text# 将已编码的json字符串解码为python对象 data = json.loads(text)# print(data) # 在fiddler中刚刚看到每一个视频的所有信息 # 都在aweme_list中 video_url = data['aweme_list']path = 'E:/爬虫数据/douyin'if not os.path.exists(path):os.mkdir(path)for each in video_url:# 视频描述 desc = each['desc']url = each['video']['play_addr']['url_list'][0]print(desc, url)

不幸的是,我只是导入了个requests库,其他什么都没有改程序便报错了

No module named ‘requests’,简直黑人问号脸,怎么会没有requests呢,我天天都在用,怎么会报这个错呢?
解决办法:相信大家也都安装了requests库了的,如果你也报这种错误,我们就再来捣鼓下路径问题,提示是没有requests模块,我非常确定我有这个模块,那只能说明mitmdump在执行脚本的时候没有找到requests模块,那我们可以把我们的脚本douyi_t.py放在与requests一个文件下执行 

可以通过上述命令看到我的requests库在D:\my-install\Anaconda\Lib\site-packages,我们把douyin_t.py放在这儿

现在就没有再报错了,接下来的事情就顺利成章了

# douyin_t.py 
import json, os
import requestsdef response(flow):url = 'https://api.amemv.com/aweme/v1/aweme/post/'# 筛选出以上面url为开头的url if flow.request.url.startswith(url):text = flow.response.text# 将已编码的json字符串解码为python对象 data = json.loads(text)# print(data) # 在fiddler中刚刚看到每一个视频的所有信息 # 都在aweme_list中 video_url = data['aweme_list']path = 'E:/爬虫数据/douyin'if not os.path.exists(path):os.mkdir(path)for each in video_url:# 视频描述 desc = each['desc']url = each['video']['play_addr']['url_list'][0]# print(desc,url) filename = path + '/' + desc + '.mp4'# print(filename) req = requests.get(url=url, verify=False)with open(filename, 'ab') as f:f.write(req.content)f.flush()print(filename, '下载完毕')

这个只要我们没有关闭mitmdump运行窗口,我们可以搜索其他的抖音用户的页面,也会被下载下来,不知道大家是更喜欢appium自动化,还是喜欢自己用手滑,嘿嘿嘿嘿

若针对requests导入错误有更好的建议,欢迎分享(●ˇ∀ˇ●)

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/496060.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python3 爬虫实战:为爬虫添加 GUI 图像界面 之 tkinter

From:https://blog.csdn.net/Fan_shui/article/details/81611752 一、前言 前面我们写的爬虫只能运行在具有python环境的电脑上,若是把源代码发给别人,很大可能性是运行不了的,所以我们本节的目的是为爬虫创建 GUI 界面&#xff0…

22条API设计的实践

来源:22条API设计的最佳实践 来源:dockone.io/article/2434604 原文:https://betterprogramming.pub/22-best-practices-to-take-your-api-design-skills-to-the-next-level-65569b200b9 曾经因为一个糟糕的API而感到沮丧吗? 在…

linux python 永久添加自己的模块路径

Linux 环境变量配置 : https://blog.csdn.net/freeking101/article/details/81013045 linux python 永久添加自己的模块路径 添加路径: cd /usr/local/python3/lib/python3.6/site-packages vi my.pth 1 . 临时性添加>>>import sys >>>sys.path.a…

边缘计算:智慧城市的下一个浪潮

来源:资本实验室 作者:王进目前,在全球,智慧城市建设处于一个概念到逐步落地的过程,而科技巨头与投资大佬是这一新浪潮重要的参与者。2017年10月,Alphabet旗下城市创新部门Sidewalk Labs宣布,将…

Nature:揭示大脑中的免疫记忆

来源:生物谷摘要:在一项新的研究中,德国研究人员报道身体中的炎症可能影响小鼠大脑中的免疫细胞的“记忆”。在一项新的研究中,德国研究人员报道身体中的炎症可能影响小鼠大脑中的免疫细胞的“记忆”。如果这一发现在人体中得到证…

电竞专业与计算机专业,2021电竞专业的大学排名 电竞专业主要上什么课程

2017年教育部下文增设电竞专业,电子竞技人才培养体系正式形成。为了让广大电竞爱好者,从业者,考生及家长全面客观地了解电竞教育现状,电竞专业高校排行榜应运而生!2021年电竞专业大学排行榜1、中国传媒大学南广学院中国…

计算机主机部件与外设的工作原理,计算机组成原理名词解释和简答

第一章名词解释:1.中央处理器:主要由运算器和控制器组成。控制部件,运算部件,存储部件相互协调,共同完成对指令的执行。2.ALU:对数据进行算术和逻辑运算处理的部件。3.数据通路:由操作元件和存储…

周志华:满足这三大条件,可以考虑不用深度神经网络

来源: AI科技大本营摘要:4 月 15 日举办的京东人工智能创新峰会上,刚刚上任京东人工智能南京分院学术总顾问的周志华教授做了《关于深度学习一点思考》的公开分享。近年来,深度神经网络在语音、图像领域取得突出进展,以…

ibatis常用的集中判断语句

<isPropertyAvailable> 属性是存在<isNotPropertyAvailable> 属性不存在<isNull> 属性值是null<isEmpty> 判断Collection.size<1或String.length()<1<isEqual> 等于<isNotEqual> 不等于<isGreaterThan> 大于<isGreaterEqua…

网络计算机显示10,win10电脑网络显示一个球怎么回事

win10电脑网络显示一个球怎么回事&#xff1f;win10上不了网怎么办&#xff1f;其实这个是网络连接图标&#xff0c;只是因为没网络了就会变成地球图标。那么当出现win10网络变成球状怎么办呢&#xff1f;下面小编教下大家win10电脑网络显示一个球的解决方法。方法一&#xff1…

专家观点 | 李德仁:基于云计算的智慧城市运营脑

来源&#xff1a;智慧城市产业与技术创新战略联盟中国科学院、中国工程院院士李德仁发表了“基于云计算的智慧城市运营脑”的主题报告&#xff0c;深度解读了以公共云服务平台为核心的智慧城市运营脑。首先&#xff0c;李院士就智慧城市及其应用发表了自己的见解。他认为&#…

python3 中的 eval 函数

From&#xff1a;http://blog.csdn.net/zhanh1218/article/details/37562167 Python:eval的妙用和滥用&#xff1a;https://blog.csdn.net/zhanh1218/article/details/37562167 python eval()&#xff1a;http://www.cnblogs.com/dadadechengzi/p/6149930.html Python eval 函…

html超链接去虾线,挑虾线别只会用牙签了,渔民都是这样做的,1秒处理一个,超方便...

现在大家的生活条件已经越来越好&#xff0c;所以说人们在城市的时候也是越来越注意饮食这一方面了&#xff0c;但其实大家在做饭的时候都喜欢买上一些营养丰富的食材&#xff0c;就像是在最近几年海鲜也是让大家都非常喜欢的。海鲜是我们日常生活中都非常喜欢的一个美食&#…

AI将成科学家“高级定制”工具

来源&#xff1a;科技日报 作者&#xff1a;房琳琳化学家有了新的实验助手——人工智能&#xff08;AI&#xff09;。随着深度学习算法的进一步应用&#xff0c;AI计算机程序能帮助药物化合物等小有机分子产生所需的反应序列&#xff0c;制定合成路径。《自然》杂志近日发表了…

华为式创新与海尔式创新——两条道路考验中国制造

来源&#xff1a;企业管理杂志&#xff08;ID&#xff1a;qyglzz&#xff09;作者&#xff1a;吴兴杰&#xff0c;中国管理科学研究院专家咨询委员会副主任、学术委员会委员、研究员以华为为代表的聚合化创新之路非常难走而又不得不走&#xff0c;否则永远只能当二流甚至三流企…

Python 日期 的 加减 等 操作

datetime — Basic date and time types&#xff1a;https://docs.python.org/3.8/library/datetime.html dateutil --- powerful extensions to datetime&#xff1a;https://dateutil.readthedocs.io/en/stable/index.html Python time 和 datetime 的常用转换处理&#xf…

牛津大学计算机系主任:人工智能立法重在抓机遇、防危害

来源&#xff1a;科技日报 作者&#xff1a;郑焕斌“人工智能立法的重点应在于充分利用AI技术所提供的各种机遇&#xff0c;构建适宜的环境以激励、培育大量AI初创公司和新服务的发展&#xff0c;防范和应对AI技术所带来的各种潜在危害。”牛津大学计算机系主任迈克尔伍尔德里…

关于deepearth的一点小问题

我下载的deepEarth的源代码&#xff0c;编译以后有错误&#xff0c;不知怎么办&#xff0c;不知道各位用没用过deepEarth啊&#xff1f;请高手指教&#xff01; 转载于:https://www.cnblogs.com/kakaleilei/archive/2010/03/09/1681608.html

计算机术语局部性,【计算机基础】程序的局部性简介

什么是局部性&#xff1f;局部性分类局部性有什么作用&#xff1f;局部性举例数据引用的局部性取指令的局部性结论完整代码什么是局部性&#xff1f;程序倾向于使用它们最近使用的地址接近或相等的数据和指令。局部性分类局部性主要分为时间局部性和空间局部性。时间局部性&…