Maison  >  Article  >  développement back-end  >  Comment supprimer efficacement plusieurs URL à l'aide de PyQt QWebPage ?

Comment supprimer efficacement plusieurs URL à l'aide de PyQt QWebPage ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-26 07:16:30188parcourir

How to Efficiently Scrape Multiple URLs Using PyQt QWebPage?

Scrape plusieurs URL avec PyQt QWebPage

QWebPage de PyQt fournit un moyen d'afficher des pages Web, ce qui le rend adapté au contenu chargé dynamiquement. Cependant, tenter plusieurs rendus peut entraîner des plantages ou un comportement inattendu.

Identification du problème

Le problème dans le code fourni provient de la création de plusieurs QApplications et QWebPages pour chaque Récupération d'URL. Au lieu de cela, une seule instance de chacun doit être utilisée, la page Web s'appuyant sur son signal loadFinished pour déclencher le traitement interne des URL suivantes.

Solution

Les améliorations suivantes concernent le problème :

  1. Une instance de QApplication et de page Web : Créez une seule QApplication et une seule page Web, en évitant les instanciations redondantes.
  2. Boucle de traitement interne : Utilisez le signal loadFinished pour récupérer les URL de manière séquentielle, en implémentant une boucle de traitement interne au sein de la page Web.
  3. Traitement HTML personnalisé : Connectez un emplacement défini par l'utilisateur au signal htmlReady, qui émet du HTML et Informations sur l'URL après le chargement de chaque page.

Utilisation

Exemple de code montrant comment utiliser la page Web améliorée :

def my_html_processor(html, url):
    print('loaded: [%d chars] %s' % (len(html), url))

import sys
app = QApplication(sys.argv)
webpage = WebPage(verbose=False)
webpage.htmlReady.connect(my_html_processor)

# example 1: process list of urls

urls = ['https://en.wikipedia.org/wiki/Special:Random'] * 3
print('Processing list of urls...')
webpage.process(urls)

# example 2: process one url continuously

import signal, itertools
signal.signal(signal.SIGINT, signal.SIG_DFL)

print('Processing url continuously...')
print('Press Ctrl+C to quit')

url = 'https://en.wikipedia.org/wiki/Special:Random'
webpage.process(itertools.repeat(url))

sys.exit(app.exec_())

Références

  • [Page Web PyQt5](https://doc.qt.io/qt-5/qwebenginepage.html)
  • [Page Web PyQt4](https : //doc.qt.io/archives/qt-4.8/qwebpage.html)

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