Maison >développement back-end >Tutoriel Python >Comment supprimer en toute sécurité plusieurs URL avec QWebPage dans Qt sans planter ?
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!