Webkit を使用して URL をロードし、Web ページからデータを抽出する小さな Web サーバーを作成しようとしています (例: タイトル、画像サイズなど)。
PythonからWebkitにアクセスするためにPyQt4を使用しています。リクエストごとに、次のような QThread を作成しています。 - QWebPage オブジェクトを作成します。 - イベント ループを実行します。 Qスレッド
これは、初めて Web ページがロードされ、そのすべてのリソース (CSS、画像) が含まれているときに非常にうまく機能します。2 回目にサーバーに URL をロードするように要求すると、Web ページはロードされますが、そのリソースはまったくロードされません (CSS も画像もありません)。そのため、画像サイズを取得しようとすると、すべてのサイズが 0,0 に設定されます。
ここにいくつかのコードスニップセットがあります:
# WebPage の読み込みを担当する QThread クラス WebKitThread(QThread): def __init__(自己、URL): QThread.__init__(self) self.url = URL self.start() デフォルト実行 (自己): self.webkitParser = WebKitParser(self.url) self.exec_() クラス WebKitParser(QWebPage): def __init__(self、url、parent=None): QWebPage.__init__(self, 親) self.loadFinished.connect(self._loadFinished) self.mainFrame().load(QUrl(url)) def _loadFinished (自己、結果): self.computePageProperties() QThread.currentThread().exit() def computePageProperties(self): # タイトル、画像サイズを読み取るカスタム コード... self.computedTitle=XXXXXXXX
呼び出しコード (HTTP 要求に応答する) が実行されています。
t = WebKitThread(url) t.wait() # WebKitParser のプロパティを使って何かをする print t.webkitParser.computedTitle