我如何重新呈现HTML PyQt4

时间:2015-11-13 16:57:31

标签: html pyqt4 render

我已设法使用建议的代码,以便从网页呈现HTML,然后解析,查找和使用所需的文本。我使用的是PyQt4。但是,我感兴趣的网页经常更新,我想重新呈现页面并检查更新的HTML以获取新信息。

因此我的pythonscript中有一个循环,所以我重新开始。但是,这会导致程序崩溃。我搜索过网,发现这是预料之中的,但我没有找到任何关于如何正确操作的建议。它一定很简单,我猜?

from PyQt4.QtGui import *

from PyQt4.QtCore import *

from PyQt4.QtWebKit import *


class Render (QWebPage):

    def __init__(self, url):
        self.app = QApplication(sys.argv)
        QWebPage.__init__(self)
        self.loadFinished.connect(self._loadFinished)
        self.mainFrame().load(QUrl(url))
        self.app.exec_()
    def _loadFinished(self, result):
        self.frame = self.mainFrame()
        self.app.quit()

r = Render(url)  

html = r.frame.toHtml()

当我第二次点击r=Render(url)时,它会崩溃。 S,o我正在寻找像r = Rerender(url)这样的东西。

正如你可能猜到的那样,我并不是一个程序员,而且我通常会窃取我几乎无法理解的代码。但这是我第一次找不到答案,所以我想我应该自己提问。

我希望我的问题很清楚,有人有答案。

1 个答案:

答案 0 :(得分:0)

简单演示(适应品味):

import sys, signal
from PyQt4 import QtCore, QtGui, QtWebKit

class WebPage(QtWebKit.QWebPage):
    def __init__(self, url):
        super(WebPage, self).__init__()
        self.url = url
        self.mainFrame().loadFinished.connect(self.handleLoadFinished)
        self.refresh()

    def refresh(self):
        self.mainFrame().load(QtCore.QUrl(self.url))

    def handleLoadFinished(self):
        print('Loaded:', self.mainFrame().url().toString())
        # do stuff with html ...
        print('Reloading in 3 seconds...\n')
        QtCore.QTimer.singleShot(2000, self.refresh)

if __name__ == '__main__':

    signal.signal(signal.SIGINT, signal.SIG_DFL)
    app = QtGui.QApplication(sys.argv)
    webpage = WebPage('http://en.wikipedia.org/')
    print('Press Ctrl+C to quit\n')
    sys.exit(app.exec_())