最近几天,由于肖战粉丝举报ao3平台导致的“227大团结”事件,使得大家一度人人自危,担心某天自己喜欢的东西也因为上边的某个“政策”被删除或隔之墙外。最近由于疫情,托朋友买的花花写真没有到手 😭,只能在网上看看别人的扫图,联系到这个事件,便有了将图片下载下来保存(防止某天被封)的念头。于是乎,便写了一个爬虫,也就有了这篇文章。
目标网站是 https://www.nogizaka46.net.cn/pic/memSelect.html 。
进入网站后会显示不同成员的合集,点击图片后会跳转到相应的合集,此时url变化为 nogizaka46.net.cn/pic/memberInfo.html 后面的参数name=*区别了不同合集。
当然直接查看网页的showpic.js文件也可以得出这个结论。
查看网页的html代码,很容易找到图片对应的位置,如下图
此时理论上已经可以爬取图片,但发现在此页面中,点击左侧的图片可以切换右侧的具体合集,并且页面向下滚动至底时,会加载新的图片。因此直接爬取无法得到第一页之后的图片。此过程中url未发生变化,无法通过url的变化直接获得后边图片,猜测网页应该运用了ajax技术,于是继续查看网页的js代码。
可以发现图片的地址是从nogizaka/getImageUrl获取的,查看网页的网络请求记录,我们可以找到一个GET请求,同样是name=*的方式获取相应合集的图片地址。
直接在浏览器输入name为ikuta_protrait1的URL,不出所料,我们得到了此合集的所有图片地址。
那我们如何获得所有合集对应的name呢?其实和上边的原理相同,可以看到是通过/pic/pic_group/getMemberInfo得到所有的合集名称。
同样,在网络请求记录也可以找到这条请求:
于是便得到了合集的名称:
至此,我们爬虫的基本逻辑分析完成👏,剩下的便是代码的编写部分了。