Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann man mit PyQt QWebPage mehrere URLs effizient scrapen?

Wie kann man mit PyQt QWebPage mehrere URLs effizient scrapen?

Susan Sarandon
Susan SarandonOriginal
2024-10-26 07:16:30188Durchsuche

How to Efficiently Scrape Multiple URLs Using PyQt QWebPage?

Scraping mehrerer URLs mit PyQt QWebPage

PyQts QWebPage bietet eine Möglichkeit zum Rendern von Webseiten und eignet sich daher für dynamisch geladene Inhalte. Der Versuch mehrerer Renderings kann jedoch zu Abstürzen oder unerwartetem Verhalten führen.

Problemidentifizierung

Das Problem im bereitgestellten Code ergibt sich aus der Erstellung mehrerer QApplications und QWebPages für jedes URL-Abruf. Stattdessen sollte jeweils eine einzelne Instanz verwendet werden, wobei sich die Webseite auf ihr LoadFinished-Signal verlässt, um die interne Verarbeitung nachfolgender URLs auszulösen.

Lösung

Die folgenden Verbesserungen beheben das Problem:

  1. Eine QApplication- und WebPage-Instanz: Erstellen Sie eine einzelne QApplication und WebPage und vermeiden Sie redundante Instanziierungen.
  2. Interne Verarbeitungsschleife: Nutzen Sie das LoadFinished-Signal, um URLs nacheinander abzurufen und eine interne Verarbeitungsschleife innerhalb der Webseite zu implementieren.
  3. Benutzerdefinierte HTML-Verarbeitung: Verbinden Sie einen benutzerdefinierten Slot mit dem htmlReady-Signal, das HTML ausgibt und URL-Informationen nach jedem Laden der Seite.

Verwendung

Beispielcode, der zeigt, wie die verbesserte Webseite verwendet wird:

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_())

Referenzen

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

Das obige ist der detaillierte Inhalt vonWie kann man mit PyQt QWebPage mehrere URLs effizient scrapen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn