2015-11-13 166 views
1

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

因此,我在我的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)的东西。你可能会猜到,我并不是一个程序员,我通常会通过窃取我几乎不了解的代码来获取。但这是我第一次找不到答案,所以我想我应该自己提出一个问题。

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

+0

的[PyQt的类没有第二个使用工作]可能的复制(http://stackoverflow.com/questions/21909907/pyqt-class-not-用于第二次使用) – ekhumoro

+0

感谢您的建议。这是我阅读的帖子之一,并没有想到它会帮助我。我会再仔细看看,如果它确实不能解决我的问题,我将解释为什么 – Pal

+0

建议的解决方案是处理如何呈现列表中指定的几个不同的网页。这可能会工作,如果我做一个长列表多次指定相同的网址,但似乎并不是一个有效的解决方案。我不是一个足够熟练的程序员,不知道如何根据需要修改代码。我的希望是,其他人真的做到了这一点,因为我认为这不是一个非常规的功能。我会继续环顾四周,看看我是否找到答案,如果我找到答案,会在这里发帖 – Pal

回答

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

再次感谢。你的例子是给我一个网页对象,根据需要刷新。我现在的问题是,我不知道如何“用HTML做东西”,因为我的对象处理知识是不存在的。我如何实际访问对象中的html?我知道这是一个非常基本的东西,我应该能够通过学习基础知识来找到答案。这也是为什么我在这里提出问题并让工作人员没有完全有能力使用答案时感到有点不舒服。再次感谢,我将再次看到这两个例子以及基本文档。 – Pal

+0

啊,我在第一个例子中找到了答案,所以我只是在你的“用html做东西”下面添加了html = self.mainFrame()。toHtml(),它似乎工作。 – Pal