Screen-Scraping (dynamisch)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Winflo
User
Beiträge: 9
Registriert: Donnerstag 25. Juni 2020, 12:17

Hallo, ich bin dabei einen Screen-Scraper für eine dynamische Website zu programmieren und hänge seit Tagen an folgendem Problem:

Ich möchte von der Preisvergleichsseite (https://www.heizpellets24.de/pelletprei ... 115/6000/1) folgenden Preis auslesen:

Bild

Wenn ich den nachfolgenden Code ausführe erhalte ich wie gewünscht den HTML-Code der Website, allerdings ohne diese Preisinformation.

Kann mir hier jemand Hilfestellung geben was ich außer Acht gelassen habe, bzw. wo mein Fehler liegt?

Code: Alles auswählen

import bs4 as bs
import sys
from PyQt5.QtWebEngineWidgets import QWebEnginePage
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QUrl

class Page(QWebEnginePage):
    def __init__(self, url):
        self.app = QApplication(sys.argv)
        QWebEnginePage.__init__(self)
        self.html = ''
        self.loadFinished.connect(self._on_load_finished)
        self.load(QUrl(url))
        self.app.exec_()

    def _on_load_finished(self):
        self.html = self.toHtml(self.Callable)
        print('Load finished')

    def Callable(self, html_str):
        self.html = html_str
        self.app.quit()


def main():
    page = Page('https://www.heizpellets24.de/pelletpreis-direkt/10115/6000/1')
    soup = bs.BeautifulSoup(page.html, 'html.parser')
    price = soup.find('div', class_='Price-middle total')
    print (price)
Die Ausgabe ist "None".

Vielen Dank im voraus!
Benutzeravatar
__blackjack__
User
Beiträge: 13242
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Du wartest nicht lange genug. Nur solange bis die Hauptseite geladen ist. Die lädt aber per JavaScript Daten/Teile der Seite nach und das dauert länger. Auf der Webseite im Browser teilweise spürbar länger als Dein Skript läuft.
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.
Winflo
User
Beiträge: 9
Registriert: Donnerstag 25. Juni 2020, 12:17

Vielen Dank für die schnelle Antwort und damit einhergehende Hilfe! Da ich mit PyQt keinen passenden Code zu dieser Warte-Thematik schreiben konnte, habe ich es mit Selenium gemacht.
Antworten