Maison >développement back-end >Tutoriel Python >Comment supprimer en toute sécurité plusieurs URL avec QWebPage dans Qt sans planter ?

Comment supprimer en toute sécurité plusieurs URL avec QWebPage dans Qt sans planter ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-26 05:27:30789parcourir

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

Scraper plusieurs URL avec QWebPage : éviter les plantages

Dans Qt, utiliser QWebPage pour récupérer du contenu Web dynamique peut être problématique lors du scraping de plusieurs pages consécutivement . Le problème suivant met en évidence les scénarios de crash potentiels :

Problème :

L'utilisation de QWebPage pour afficher une deuxième page entraîne souvent des plantages. Des plantages sporadiques ou des erreurs de segmentation se produisent lorsque l'objet utilisé pour le rendu n'est pas supprimé correctement, entraînant des problèmes potentiels lors de sa réutilisation.

Présentation de la classe QWebPage :

La classe QWebPage propose des méthodes pour le chargement et le rendu des pages Web. Il émet un signal loadFinished lorsque le processus de chargement est terminé.

Solution :

Pour résoudre le problème de plantage, il est recommandé de créer une seule instance QApplication et WebPage et d'utiliser le signal loadFinished de la page Web pour récupérer et traiter les URL en continu.

Exemple de page Web 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>

Utilisation :

<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>

Cette approche garantit que l'objet QWebPage est correctement géré et évite les plantages en contrôlant la récupération et le traitement des URL au sein d'une seule boucle d'événement.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn