我如何重新渲染 HTML PyQt4

How do I rerender HTML PyQt4

我已经设法使用建议的代码从网页呈现 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()

S,o 当我第二次点击 r=Render(url) 时,它崩溃了。 S,o 我正在寻找类似 r = Rerender(url) 的内容。

正如您可能猜到的那样,我算不上一个程序员,而且我通常通过窃取我几乎看不懂的代码来度过难关。但是我是第一次找不到答案,所以我想我应该自己问一个问题。

我希望我的问题足够清楚并且有人知道答案。

简单演示(适应口味):

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_())