Seite 1 von 1

Screen-Scraping (dynamisch)

Verfasst: Donnerstag 25. Juni 2020, 20:41
von Winflo
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!

Re: Screen-Scraping (dynamisch)

Verfasst: Donnerstag 25. Juni 2020, 21:22
von __blackjack__
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.

Re: Screen-Scraping (dynamisch)

Verfasst: Freitag 26. Juni 2020, 22:33
von Winflo
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.