77

私が達成したいのは、Pythonの任意のWebサイトからWebサイトのスクリーンショットを取得することです。

環境:Linux

4

14 に答える 14

52

Webkit を使用した簡単なソリューションを次に示します: http://webscraping.com/blog/Webpage-screenshots-with-webkit/

import sys
import time
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *

class Screenshot(QWebView):
    def __init__(self):
        self.app = QApplication(sys.argv)
        QWebView.__init__(self)
        self._loaded = False
        self.loadFinished.connect(self._loadFinished)

    def capture(self, url, output_file):
        self.load(QUrl(url))
        self.wait_load()
        # set to webpage size
        frame = self.page().mainFrame()
        self.page().setViewportSize(frame.contentsSize())
        # render image
        image = QImage(self.page().viewportSize(), QImage.Format_ARGB32)
        painter = QPainter(image)
        frame.render(painter)
        painter.end()
        print 'saving', output_file
        image.save(output_file)

    def wait_load(self, delay=0):
        # process app events until page loaded
        while not self._loaded:
            self.app.processEvents()
            time.sleep(delay)
        self._loaded = False

    def _loadFinished(self, result):
        self._loaded = True

s = Screenshot()
s.capture('http://webscraping.com', 'website.png')
s.capture('http://webscraping.com/blog', 'blog.png')
于 2012-08-20T01:21:49.213 に答える
19

Mac にはwebkit2pngがあり、Linux+KDE ではkhtml2pngを使用できます。私は前者を試してみましたが、非常にうまく機能し、後者が使用されていると聞きました。

私は最近、クロスプラットフォームであると主張するQtWebKitに出くわしました (Qt は WebKit をライブラリに組み込んだと思います)。しかし、私はそれを試したことがないので、これ以上は言えません。

QtWebKit のリンクは、Python からアクセスする方法を示しています。少なくともサブプロセスを使用して、他のプロセスと同じことができるはずです。

于 2009-07-29T01:12:48.000 に答える
6

arsの答えについてコメントすることはできませんが、実際にはQtWebkitを使用してRoland Tapkenのコードを実行し、非常にうまく機能しています。

Rolandが彼のブログに投稿したものがUbuntuでうまく機能することを確認したかっただけです。私たちの製品版は、彼が書いたものをまったく使用していませんでしたが、PyQt/QtWebKitバインディングを使用して大成功を収めています。

:以前のURLは次のとおりです:http ://www.blogs.uni-osnabrueck.de/rotapken/2008/12/03/create-screenshots-of-a-web-page-using-python-and-qtwebkit/作業用コピーで更新しました。

于 2009-07-29T04:19:46.443 に答える
1

HTML をレンダリングできる純粋な Python Web ブラウザーがないため、実行している環境については言及していません。

しかし、Mac を使用している場合、私はwebkit2pngを使用して大きな成功を収めました。そうでない場合は、他の人が指摘したように、多くのオプションがあります。

于 2009-07-28T23:28:08.540 に答える
-1

これを試して..

#!/usr/bin/env python

import gtk.gdk

import time

import random

while 1 :
    # generate a random time between 120 and 300 sec
    random_time = random.randrange(120,300)

    # wait between 120 and 300 seconds (or between 2 and 5 minutes)
    print "Next picture in: %.2f minutes" % (float(random_time) / 60)

    time.sleep(random_time)

    w = gtk.gdk.get_default_root_window()
    sz = w.get_size()

    print "The size of the window is %d x %d" % sz

    pb = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,False,8,sz[0],sz[1])
    pb = pb.get_from_drawable(w,w.get_colormap(),0,0,0,0,sz[0],sz[1])

    ts = time.time()
    filename = "screenshot"
    filename += str(ts)
    filename += ".png"

    if (pb != None):
        pb.save(filename,"png")
        print "Screenshot saved to "+filename
    else:
        print "Unable to get the screenshot."
于 2013-11-18T10:09:39.093 に答える