使用QWebPage 抓取多個URL:防止崩潰
在Qt 中,連續抓取多個頁面時,使用QWebPage 檢索動態Web 內容可能會出現問題。以下問題突顯了潛在的崩潰情況:
問題:
使用 QWebPage 渲染第二個頁面通常會導致崩潰。當用於渲染的物件沒有正確刪除時,會發生零星的崩潰或段錯誤,從而導致重複使用時出現潛在問題。
QWebPage 類別概述:
QWebPage 類別提供了方法來載入和渲染網頁。當載入過程完成時,它會發出 loadFinished 訊號。
解決方案:
要解決崩潰問題,建議建立單一 QApplication 和 WebPage 實例並使用網頁的 loadFinished 訊號連續取得和處理 URL。
PyQt5 網頁範例:
<code class="python">import sys class WebPage(QWebEnginePage): def __init__(self, verbose=False): super().__init__() self._verbose = verbose self.loadFinished.connect(self.handleLoadFinished) def process(self, urls): self._urls = iter(urls) self.fetchNext() def fetchNext(self): try: url = next(self._urls) except StopIteration: MyApp.instance().quit() # Close app instead of crashing else: self.load(QUrl(url)) def processCurrentPage(self, html): # Custom HTML processing goes here print('Loaded:', str(html), self.url().toString()) def handleLoadFinished(self): self.toHtml(self.processCurrentPage)</code>
用法:
import sys
app = QApplication(sys.argv)
webpage = WebPage(verbose=False)
# Example URLs to process
urls = ['https://example.com/page1', 'https://example.com/page2', ...]
webpage.process(urls)
sys.exit(app.exec_())
以上是如何在 Qt 中使用 QWebPage 安全地抓取多個 URL 而不會崩潰?的詳細內容。更多資訊請關注PHP中文網其他相關文章!