使用 PyQt 抓取网页图片



我想构建一个网络抓取实用程序,旨在捕获打算查看的图像。 某些图像包含透明层,因此设计为在特定颜色或纹理背景前查看。对于此类图像,我想截取屏幕截图,但仅裁剪为正在抓取的图像,以便捕获图像及其相关背景。

我正在寻找用于PyQt的QtWebKit模块。 对于那些熟悉的人,这个模块适合我的需求吗? 或者,也许不同的库或实用程序更适合此任务?

我建议看看PhantomJS(http://phantomjs.org/)。 我想象工作流程是使用 phantomjs 捕获整个页面,以及捕获图像位置和大小的数据。 然后使用PIL(甚至只是GraphicsMagick)将捕获页面裁剪为该图像。

PhantomJS是用javascript编程的,但你只需要几行JS代码来加载页面,在其中找到图像来查询大小和位置并捕捉捕获。

编辑(回应评论):当然。 您可以使用jQuery或您选择的其他工具。 下面是一个简短的 phantomjs 示例,用于打开页面并获取页面中图像的大小/位置:

 var page = require('webpage').create();
 page.open(URL, function(status) {
   var img_attr = page.evaluate(function(){
            var el = $("img#SpecialID");
            var result = el.offset();  // Returns top, left
            result.width = el.width();
            result.height = el.height();
            return result;
        });
   console.log(img_attr);  //Obviously, you'd want to write that to disk instead
   page.render(OUTPUT_FILE);
  });

因此,如果您修复控制台.log将记录写入磁盘,并为 URL 和 OUTPUT_FILE 添加命令行选项,以及一些错误处理,您将有一个方便的实用程序可以从您的 Python 代码调用。

我建议你在使用 python 时spynner =)

import spynner
browser = spynner.Browser()
browser.load("http://www.wordreference.com")
browser.snapshot( .... )
browser.close()

请参阅 https://github.com/makinacorpus/spynner

最新更新