封面先放个小姐姐。。。
去年底写的Instagram的爬虫,最近去爬图片,不好使了???只能获取首页的12张图片,后面的打死就下载不了。
然后就打开我Google开始搜啊搜啊,就搜到了一些信息,说是可能是Instagram的反扒机制,还能怎么办,,尝试一下咯。
结果,,,是真的。
整理一下记录下来。
反爬机制说明
x-instagram-gis
:Instagram在request header中使用这个字段来进行反爬。
这里举个例子:
x-instagram-gis:b4e8bf56e344a42a09858789940ac031
字段我们知道了,但是这个字段的值是如何计算的呢。当然,我最开始也是不清楚了,大概是有爬虫大牛各种尝试或者瞄一眼猜到了吧,哈哈。
目前知道的这个值的算法如下:
x-instagram-gis = MD5(rhx_gis:variables)
为了验证这个公式是否正确,我们来实际验证一番:
-
获取rhx_gis
可以在页面源码的<script type="text/javascript">window._sharedData
中获取,如下:
-
获取variables
这个可以通过chrome F12 然后查看Network中的XHR请求获取,如下:
分别取得这两个值组合为一个字符串
a93124d26f4cbe86a04de6299fbe4535:{"id":"7051181864","first":12,"after":"QVFCUDJoSXBqWkVteEE0NjBpbTdFenowaC1ac0I4NnAydWNCejBjRDdwemRGaFd2aWxfNTd0bXpIVWEyeFRWMzEyYUR4ZEhCYlBvU1ZOS0Z6U0J5SUs2Uw=="}
找一个在线MD5加密的网站计算,这里我使用的MD5加密,结果如下:
到这里我们可以跟上面那张图片里面的x-instagram-gis
的字段值做对比了,看是不是一模一样。
好了,到这里基本上就又可以快乐的下图片、图片啦。
更新说明
2019.05.20 update
解决方案如下:
将rhx_gis字段设置为空值,目前可以正常下载。
2019.06.21 update
解决方案如下:
去掉请求header里面的x-instagram-gis
字段,按照最原始方式爬取。