![](/img/trans.png)
[英]Each first element of a pagination/list gets parsed twice on AJAX website - Selenium 3.0.2, Firefox webdriver, BeautifulSoup 4.5.1
[英]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.