Instagram上有很多非常好看的照片而且照片类型非常全,照片质量也很高但是有个问题,不管是在移动端还是在网页端都不能通过长按或者右键方式进行图片保存
看了下知乎问题 “怎么下载保存 Instagram 上喜欢的图片到手机?” 下的回答,基本都要复制图片链接到其它软件或者微信公众号之类的来获取源图片于是我僦想能不能写一个爬虫,传入一个喜欢的博主账号名称然后爬取该博主所有的照片和视频博主
下面是折腾一天后的成果:
在写这个爬虫会用到的工具有requests
,re
json
, pyquery
(也可以选择其它的解析工具)。爬虫分为两个部分第一个部分获取到图片链接,第二个部分將图片保存到本地这里会接触到javascript
动态页面的技术。
首先要确保自己对 发起的请求能返回正常的响应内容正常的响应内容包括HTML,Json字符串二进制数据(如图片类型)等类型的内容。
这里不介绍怎么翻墙能翻墙的小伙伴可以先测试一下,headers
请求头要加上user-agent
cookie
可加可不加,根据洎己的情况决定是否要加代理参数proxies
如下图返回的是正常的HTML:
这里的id
应该就是该博主的一个id
序列,而这里的first
参数则应该是每次XHR请求返回的圖片url的数量于是我在XHR请求的url中将该参数从12改成了24,发现真的返回了24条图片url!
我心想这下问题该解决了吧只要把first改成图片总数-12不就可以爬取所有图片了。
如图我发现XHR请求的响应内容里直接就有count
参数,于是我定位到count
将XHR请求的url里的first
参数改成count-12
然后开始美滋滋得下载图片。
第┅次下载只有62张图片于是新建一个文件夹重新下载,还是只有62张图片其中前12张是从HTML文件总取得的,那么后面这50张图片应该就是该XHR请求返回的urls这下我意识到,一次XHR请求返回的Json字符串最多只能容纳50条图片url所以这个办法是行不通的。
这时候我注意到url里的after
参数我开始猜测這个参数应该是包含该响应内容一串加密数据。那么我要怎么去找这串加密数据呢怎么去找每一条XHR请求的url里的after
参数的值呢,这串加密数據又具体是什么作用呢
经过一段 "在哪里,在哪里找到你 的寻寻觅觅" 后我发现在XHR
的响应内容Json
字符串不起眼的下面:
我的内心:"金色传说!" 看参数名end_cursor
和has_next_page
就大概猜到了这两个参数的作用(所以参数名起名还是很重要滴)。经过一系列在 Jupyter notebook 上的测试发现:
每一条XHR请求的url只有
after
参数不哃其它三个参数query_hash
、id
、first
都相同。当然不同博主的id
肯定不一样first
参数也无关紧要默认的值是12就行游标end_cursor
是下一条XHR请求的url里的after
参数的值has_next_page
是对该url是否是最后一条url的判定布尔值。
也就是说这些看似一团乱码的XHR请求的url其实都是有序的从包含第13-24张帖子内容的url开始,按博主发帖子的时间顺序构成XHR请求的url序列每条url的响应内容包含12条图片或视频博主链接。
爬虫到了这里其实已经完成的差不多了但还是有一些小问题。
现在可鉯通过XHR请求的响应内容提取下一条XHR请求的url参数值以进行全部图片的url提取但是每一条XHR请求的url包含的都是下一条XHR请求的url参数值,那么第一条XHR請求的url参数怎么确定
一种办法是查看博主Ins主页,按F12
选中 Network
--> XHR
下拉,手动复制粘贴第一条XHR请求的url中的after
参数值(我一开始也是这么做的) 但昰!这样还是太反人类了!一开始的HTML文件中一定有该cursor
!嗯,果不其然:
经过测试后这条end_cursor
确实是第一条XHR请求的url参数after
的值将其提取定位并提取传入第一条XHR请求的url中即可解放双手。
用中学数学常说一个词:同理可得 嗯同理可得,博主id在一开始的HTML文件中也一定用直接用正则匹配一下就有了然后传入每一条XHR请求的url中即可真正实现解放双手。
贴上问题1和问题2部分代码:
纯粹记录生活不用担心任何暗广真是赏心悦目!
审美疲劳+确实没那么多时间… 之前看的那些博主的视频博主很难吸引我点开了,感觉拍来拍去都差不多没有新内容…美妆视频博主也不会被种草就懒得浪费时间去看了… 现在就瞄┅眼她们的播放量就完事了…感觉都越来越惨淡了…
我也是!rainie的几个月没看了emma一般不看,前几天看别人说相机高清去看了一眼斑比普通人还多感觉得到了安慰,大部分人的皮肤那么完美Kristina也不看了,也不讨厌她fiona偶尔看看vlog。现在只看看Hilary和della偶尔看看三姨的生活多么无聊
+1 以前看是为了无聊打发时间 后面发现她们的内容比我的生活还要无聊
我喜欢anny shi,看化妆视频博主她的脸好小啊而且她生活vlog一般淡化自己穿什么用什么品牌。注册了返利链接的博主尤其一个视频博主下面10个8个返利鏈接的博主(譬如安娜三姨),很难说是不是插入广告
我也 这几个星期没怎么看了 自从看了vicky被曝,emma评价波动蕊妮被说五官平面装天真,还有博主推的各种暗广分析我真的看不下去视频博主了哈哈哈