我已设法使用建议的代码,以便从网页呈现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)
这样的东西。
正如你可能猜到的那样,我并不是一个程序员,而且我通常会窃取我几乎无法理解的代码。但这是我第一次找不到答案,所以我想我应该自己提问。
我希望我的问题很清楚,有人有答案。
答案 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_())