鱼C论坛

 找回密码
 立即注册
查看: 4183|回复: 9

[已解决]关于从美之图网站爬图片

[复制链接]
发表于 2022-7-7 00:02:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
自从妹子图网站倒了后(懂的都懂,不懂的也请不要举报,技术交流嘛),我找到了一个代替网站“美之图”,以下是链接:
https://mmzztt.com/photo/

在这个网站看图的时候,发现在地址栏的网址不变的情况下,点击主图部分进行下一张查看,我用开发者模式F12看了一下,在figure→img标签下,会有图片的路径变化。

但是遇到这种网址不变,只有点击“下一张”才会出现下张图路径的情况,我该怎么抓取,不想老是(F12打开开发者模式→寻找img标签→右键图片路径→在新tab中打开→图片另存为→F12关闭开发者模式→点击下一张)这样重复操作。

各位大佬有没有代码或者思路能便捷抓取套图,或者生成一个按钮,让我在遇到想收藏的图片时可以读取当前的img获取图片。



最佳答案
2022-7-11 11:04:00
平心而论如果想达到用网页 URL 作为输入使用 Python 直接下载页面对应的图集在这个站点上是相当困难的,其随机性比较出色的复杂化了对模式的识别。不过如果能够接受在浏览器中打开页面时可以自动导出页面的图集标题和图片链接的话,简单写了一段代码可供参考,此代码实现的是先前评论中给出的最后一个思路:
// ==UserScript==
// @name        download helper -- mmzztt.com
// @namespace   415c1050-02fc-4853-b14d-866818d37c84
// @match       https://mmzztt.com/photo/*
// @grant       none
// @version     1.0
// @author      -
// ==/UserScript==
;(()=>{
  const oldDecrypt = CryptoJS.AES.decrypt;
  CryptoJS.AES.decrypt = (...args) => {
    const result = oldDecrypt(...args);
    const base = document.querySelector('figure img').src.match(/(.+)\/.+/)[1];
    alert(JSON.stringify({
      title: document.getElementsByTagName('h1')[0].innerText,
      images: JSON.parse(result.toString(CryptoJS.enc.Utf8)).map((item) => (`${base}/${item}`)),
    }));
    return result;
  };
})();
将这段代码添加到浏览器插件 Violentmonkey 中,当打开图集(写真集)时将会弹出对话框给出包含当前页面图集的标题和图片链接数组的 JSON 字符串,可以将其复制到如 Python 中进行解析处理和下载。同时此脚本(应该)不会影响原有页面功能。
注意如果要使用脚本批量下载图片需要添加一个 HTTP header
Referer: https://mmzztt.com
同时适当调整 UA ,否则会被服务器拒绝响应(返回 403 )。
声明:此代码和猜测分析仅供学习交流使用,请用于合法用途,确认您获取数据的行为得到了数据所有者的明确同意。本人不对不当用途及造成的后果负责。
另:在本论坛中先前看到过一些帖子介绍有一个 Python 库可以模拟浏览器行为如点击等,可能也有一定参考价值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-7 07:39:20 | 显示全部楼层
看xhr
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-7 07:55:30 | 显示全部楼层

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-7 13:04:16 | 显示全部楼层

我在开发者模式的console中试过_0x21b6b5,以及其他_0x开头的,都没有返回数组列表,求大佬再指点迷津
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-7 21:34:02 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-7 21:34:41 | 显示全部楼层
要不这个aHR0cHM6Ly94aWJpLnR2Lw==
base64
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-7 21:48:08 | 显示全部楼层
如果您刚开始入门,个人首先建议考虑更换一个目标:对这个站点图像加载的行为进行解析和模拟是相对困难的。
整体把握, 3 楼的方式应该是正解,此变量名来源于页面加载的脚本,应该是随机的,需要识别其出现模式并进行提取,依靠猜测是无法解决问题的。不幸的是似乎包含这一变量名的文件名称同样是随机的,您也许可以通过搜索字符串CryptoJS来辅助定位此文件。
这些信息根本上来源于页面 HTML 末尾的大段注释中的十六进制字段,这一字段按照某种规则取子串后解码为二进制并进行 Base64 编码,利用另外脚本部分的密钥、初始向量等进行解密(应该是AES算法)即得到 3 楼中截图的 JSON 。也可以考虑像这样利用已知位置的信息模拟脚本行为来自行完成解码和解密,代价是更大的工作量。
另外一个可能的解决方案是劫持 CryptoJS 的解密函数,令其在返回前导出其解密结果。可以利用浏览器的文件加载替换等功能,或者利用 Violentmonkey 等工具进行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-10 21:17:14 | 显示全部楼层
dolly_yos2 发表于 2022-7-7 21:48
如果您刚开始入门,个人首先建议考虑更换一个目标:对这个站点图像加载的行为进行解析和模拟是相对困难的。 ...

大佬,我是没系统学过编程,网页等知识,所以您的解释我看的也是一知半解,但我发现我看过的图片文件会存在Sources→top→mmzztt.com→p.iimzt.com→2022/06这个路径下边,那我能不能用python从这个路径把图片提取出来?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-11 11:04:00 | 显示全部楼层    本楼为最佳答案   
平心而论如果想达到用网页 URL 作为输入使用 Python 直接下载页面对应的图集在这个站点上是相当困难的,其随机性比较出色的复杂化了对模式的识别。不过如果能够接受在浏览器中打开页面时可以自动导出页面的图集标题和图片链接的话,简单写了一段代码可供参考,此代码实现的是先前评论中给出的最后一个思路:
// ==UserScript==
// @name        download helper -- mmzztt.com
// @namespace   415c1050-02fc-4853-b14d-866818d37c84
// @match       https://mmzztt.com/photo/*
// @grant       none
// @version     1.0
// @author      -
// ==/UserScript==
;(()=>{
  const oldDecrypt = CryptoJS.AES.decrypt;
  CryptoJS.AES.decrypt = (...args) => {
    const result = oldDecrypt(...args);
    const base = document.querySelector('figure img').src.match(/(.+)\/.+/)[1];
    alert(JSON.stringify({
      title: document.getElementsByTagName('h1')[0].innerText,
      images: JSON.parse(result.toString(CryptoJS.enc.Utf8)).map((item) => (`${base}/${item}`)),
    }));
    return result;
  };
})();
将这段代码添加到浏览器插件 Violentmonkey 中,当打开图集(写真集)时将会弹出对话框给出包含当前页面图集的标题和图片链接数组的 JSON 字符串,可以将其复制到如 Python 中进行解析处理和下载。同时此脚本(应该)不会影响原有页面功能。
注意如果要使用脚本批量下载图片需要添加一个 HTTP header
Referer: https://mmzztt.com
同时适当调整 UA ,否则会被服务器拒绝响应(返回 403 )。
声明:此代码和猜测分析仅供学习交流使用,请用于合法用途,确认您获取数据的行为得到了数据所有者的明确同意。本人不对不当用途及造成的后果负责。
另:在本论坛中先前看到过一些帖子介绍有一个 Python 库可以模拟浏览器行为如点击等,可能也有一定参考价值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-12 01:27:12 | 显示全部楼层
dolly_yos2 发表于 2022-7-11 11:04
平心而论如果想达到用网页 URL 作为输入使用 Python 直接下载页面对应的图集在这个站点上是相当困难的,其 ...

感谢大佬!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-29 10:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表