首頁 > 後端開發 > Python教學 > 如何在 Qt 中使用 QWebPage 安全地抓取多個 URL 而不會崩潰?

如何在 Qt 中使用 QWebPage 安全地抓取多個 URL 而不會崩潰?

Barbara Streisand
發布: 2024-10-26 05:27:30
原創
785 人瀏覽過

How to Safely Scrape Multiple URLs with QWebPage in Qt without Crashing?

使用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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板