繁体   English   中英

从AJAX网站使用硒和beautifulsoup在python中用web抓取图像

[英]Webscraping images in python with selenium and beautifulsoup from an AJAX website

我花了很长时间尝试浏览html,javascript,网络流量等,并且学习了很多有关javascript,blob,base64图像解码/编码的知识,但我似乎仍然无法弄清楚如何提取图像。来自该网站的这些视频中的图像: https : //www.jamesallen.com/loose-diamonds/all-diamonds/

这就是我所知道的:每个视频实际上是一组多达512张图像,这些图像是通过名为setX.bin(X是数字)的文件从服务器中检索到的。 然后通过一个int数组将它们解析为一个blob对象(还有一些base64,但我忘了在哪里),然后以某种方式将其转换为图像。

遵循源代码非常困难,因为有意将其编写为意大利面条代码。

如何提取每颗钻石的图像并有效地进行提取?

我的解决方案是:

我可以很容易地获得setX.bin文件,如果我以某种方式将它们“传递”到javascript函数中,那我应该很好。

我的第二个解决方案是:

手动旋转每个菱形并从缓存中提取图像或类似内容。

我想用python做到这一点。

编辑:我在SO上找到了javascript,它确实给出了“ SecurityError:操作不安全”。 这里是:

function exportCanvasAsPNG(id, fileName) {

    var canvasElement = document.getElementById(id);
    canvasElement.crossOrigin = "anonymous";
    var MIME_TYPE = "image/png";

    var imgURL = canvasElement.toDataURL(MIME_TYPE);
    window.console.log(canvasElement);
    var dlLink = document.createElement('a');
    dlLink.download = fileName;
    dlLink.href = imgURL;
    dlLink.dataset.downloadurl = [MIME_TYPE, dlLink.download, dlLink.href].join(':');

    document.body.appendChild(dlLink);
    dlLink.click();
    document.body.removeChild(dlLink);
}

exportCanvasAsPNG("canvas-key-_w5qzvdqpl",'asdf.png');

我从Firefox控制台运行了它。 当我在python中运行类似的执行脚本时,我遇到了同样的问题。

我希望能够为每个画布刮所有360度图像。

Edit2:为了使这个问题更简单,我知道如何获取setX.bin文件,但是我不知道如何将该图像集合从bin转换为jpg。 每个bin文件是多个jpg文件。

.bin文件似乎只包含串联在一起的jpeg和一些主要的元数据。 您可以简单地遍历文件的字节以查找jpeg文件签名( 0xFFD8 )并切出每个图像:

JPEG_MAGIC = b"\xff\xd8"

with open("set0.bin", "rb") as f:
    s = f.read()

i = 0
start_index = s.find(JPEG_MAGIC)

while True:
    end_index = s.find(JPEG_MAGIC, start_index + 1)

    if end_index == -1:
        end_index = len(s)

    with open(f"out{i:03}.jpg", "wb") as out:
        out.write(s[start_index:end_index])

    if end_index == len(s):
        break

    start_index = end_index

    i += 1

结果:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM