QWebPage で複数の URL をスクレイピング: クラッシュを防ぐ
Qt で、QWebPage を使用して動的 Web コンテンツを取得すると、複数のページを連続してスクレイピングするときに問題が発生する可能性があります。次の問題は、潜在的なクラッシュ シナリオを示しています:
問題:
QWebPage を使用して 2 番目のページをレンダリングすると、クラッシュが発生することがよくあります。レンダリングに使用されるオブジェクトが適切に削除されていない場合、散発的なクラッシュやセグメンテーション違反が発生し、再利用時に問題が発生する可能性があります。
QWebPage クラスの概要:
QWebPage クラスはメソッドを提供します。 Web ページの読み込みとレンダリングに使用されます。読み込みプロセスが完了すると、loadFinished シグナルが発行されます。
解決策:
クラッシュの問題に対処するには、単一の QApplication および WebPage インスタンスを作成し、それを利用することをお勧めします。 Web ページのloadFinished シグナルを使用して URL を継続的に取得して処理します。
PyQt5 Web ページの例:
<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>
使用法:
<code class="python">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_())</code>
このアプローチでは、単一のイベント ループ内で URL の取得と処理を制御することで、QWebPage オブジェクトが適切に管理され、クラッシュが回避されます。
以上がQt の QWebPage を使用してクラッシュせずに複数の URL を安全にスクレイピングする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。