使用PyQt进行Web Image Scraping

时间:2012-12-11 06:05:56

标签: python pyqt web-scraping qtwebkit

我想构建一个网页抓取工具,用于捕获想要查看的图像。某些图像包含透明层,因此可以在特定颜色或带纹理的背景前查看。对于这样的图像,我想截取屏幕截图,但只剪切到正在被抓取的图像,以便捕获图像及其相关背景。

我正在为PyQt查看QtWebKit模块。对于那些熟悉的人来说,这个模块是否符合我的需求?或者也许不同的库或实用程序更适合这项任务?

2 个答案:

答案 0 :(得分:1)

我建议看一下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);
  });

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

答案 1 :(得分:1)

当您使用 =)

时,我会建议您spynner
import spynner

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

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