Capturar imagen de un sitio web



Versión: Python 2.x, 3.x; PyQt 4.
Descargas: websnapshot.zip.

El siguiente código permite capturar un sitio web y almacenarlo como una imagen del tipo PNG. Utiliza PyQt 4 y está basado en el código de fuente del Navegador web simple publicado anteriormente. Usuarios de PyQt 5 no deberían experimentar problemas con el código.

La idea principal es sencilla: utilizar la función QWidget.render, la cual permite pintar el contenido de un control en una instancia de QPixmap. Finalmente, se utiliza la función QPixmap.save para almacenar la imagen como un archivo PNG.

def snapshot():
    pageview = webview.page().view()
    pixmap = QPixmap(pageview.size())
    pageview.render(pixmap)
    pixmap.save("output.png")

Este código corresponde a la función encargada de tomar la imagen. webview corresponde a una instancia de QWebView, con una dirección de URL cargada previamente.

A continuación el código completo, también disponible en las descargas.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#      websnapshot.py
#
#      Copyright 2014 Recursos Python - www.recursospython.com
#
#

import sys

from PyQt4.QtCore import QUrl
from PyQt4.QtGui import (QApplication, QHBoxLayout, QMainWindow,
                         QPixmap, QWidget)
from PyQt4.QtWebKit import QWebView


class Widgets(QMainWindow):
    
    def __init__(self):
        QMainWindow.__init__(self)
        self.setWindowTitle("Simple Web Browser")
        self.widget = QWidget(self)
        self.webview = QWebView()
        self.webview.load(QUrl("http://www.recursospython.com/"))
        self.layout = QHBoxLayout()
        self.layout.addWidget(self.webview)
        self.widget.setLayout(self.layout)
        self.setCentralWidget(self.widget)
        
        self.webview.page().mainFrame().loadFinished.connect(
            self.load_finished)
    
    def load_finished(self):
        self.snapshot()
    
    def snapshot(self):
        pageview = self.webview.page().view()
        pixmap = QPixmap(pageview.size())
        pageview.render(pixmap)
        pixmap.save("output.png")


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Widgets()
    window.show()
    sys.exit(app.exec_())

Para asegurar que el sitio ha sido cargado completamente, el código espera a la señal loadFinished.

Resultado:

Vista previa



Deja un comentario