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