1

意図したとおりに画像をキャプチャするように設計されたWebスクレイピングユーティリティを構築したいと思います。一部の画像には透明レイヤーが含まれているため、特定の色またはテクスチャ背景の前に表示されるように設計されています。そのような画像については、スクリーンショットを撮りたいのですが、画像が関連する背景でキャプチャされるように、スクレイピングされている画像だけにトリミングされています。

私はPyQt用のQtWebKitモジュールを見ています。よく知っている人にとって、このモジュールは私のニーズに合うでしょうか?それとも、別のライブラリまたはユーティリティがこのタスクに適しているでしょうか?

4

2 に答える 2

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 コードから呼び出す便利なユーティリティが得られます。

于 2012-12-11T06:19:33.360 に答える
1

spynnerを使用しているときにお勧めします=)

import spynner

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

https://github.com/makinacorpus/spynnerを参照

于 2012-12-14T07:06:54.873 に答える