Wert aus Webseite auslesen

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
frad
User
Beiträge: 3
Registriert: Freitag 16. September 2022, 05:47

Hallo,

habe mir hier einen Endgegner ausgesucht - möchte gerne aus folgender Webseite die Anzahl der gefunden Fahrzeuge auslesen.

https://suchen.mobile.de/fahrzeuge/sear ... =Motorhome

In diesem Fall sind es Stand heute 9.837 Fahrzeuge - String: 9.837 Angebote entsprechen Deinen Suchkriterien

Für die API habe ich leider keinen Zugriff. Wie könnte ich das mit Python realisieren. Die Ansätze mit Selenium und fake-useragent sind bei mir bisher leider gescheitert ...

Danke euch.

Viele Grüße
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

Jetzt sollten wir noch wissen, was Du versucht hast, und woran es konkret gescheitert ist.
frad
User
Beiträge: 3
Registriert: Freitag 16. September 2022, 05:47

Ich habe auf Basis dieses Skriptes versucht es zum Laufen zu bekommen:

https://gist.github.com/3ele-projects/5 ... __EYlzxkBA

Author: Sebastian Weiss

Vielleicht gibt es ja noch andere Wege ...
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

ok - und was hat bei dir nicht funktioniert? Fehlermeldungen? Leeres Ergebnis? Falsches Ergebnis?

Gruß, noisefloor
frad
User
Beiträge: 3
Registriert: Freitag 16. September 2022, 05:47

DevTools listening on ws://127.0.0.1:64792/devtools/browser/834202f6-e30f-45d6-bd52-7c2e0994d271
[0916/063021.477:INFO:CONSOLE(419)] "reCAPTCHA couldn't find user-provided function: onloadCallback", source: https://www.gstatic.com/recaptcha/relea ... cha__de.js (419)
list index out of range

Aber wie gesagt - vielleicht gibt es ja auch noch andere wege?
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die Webseite versucht offensichtlich aktiv diese Form von scraping zu unterbinden. Wenn die gegen Geld Zugriff auf ihre Daten erlauben, dann ist das der andere Weg. Sonst bleibt es dabei zu versuchen, diese Systeme auszuhebeln, indem man so tut, als ob man ein Besucher wäre. Inklusive reCaptcha überwinden. Wie man sowas mit Selenium macht, kann man googeln. Muss dann ausprobiert werden. Ob’s klappt - keine Ahnung. Das ist ja ein ewiges Aufrüsten.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

das sieht stark nach eine Fehlermeldung von JavaScript aus, weil eine Bibliothek oder Funktion nicht (nach-) geladen werden kann.
vielleicht gibt es ja auch noch andere wege?
Du musst halt mit Hilfe von Selenium nachprogrammieren, was du auch händisch machst. Was u.U. sehr aufwendig ist. Gerade dann, wenn der Betreiber der Seite nicht möchte, dass Webscraping genutzt wird. Was i.d.R. auch nicht die feine Art ist.

mobile.de hat eine API (https://services.mobile.de/manual/index.html) inkl. einer dedizierten Search-API. Was ziemlich sicher der bessere und einfacherer Ansatz ist. Auf der Webseite ist leider nicht aufgeführt, welche Voraussetzung man für einen Zugang braucht.

Gruß, noisefloor
August1328
User
Beiträge: 65
Registriert: Samstag 27. Februar 2021, 12:18

Hallo frad,

ich habe auch schon mal probiert mit fake-useragent eine Webseite zu scrapen, aber wurde immer wieder geblockt. Seit ich den gleichen user-agent wie bei meinem Browser nutze, klappt das problemlos.

Somit probiere doch mal in der Datei app.py in Zeile 38

Code: Alles auswählen

userAgent = ua.random
den user-agent Deines Browser zu setzen, den Du z.B. hier bekommst http://wieistmeinuseragent.de/ und dann das Skript nochmal laufen lassen.

Ansonsten frage ich mich, falls Du nur diese Zahl auslesen willst, ob Du wirklich Selenium brauchst. Ich habe das noch nie genutzt, aber wenn ich mir den Quelltext der Webseite anschaue, dann sollte das ganz einfach mit z.B. Beautifulsoup funktionieren, die Zahl steckt in einem Überschriften Tag, der entsprechend benannt ist:

Code: Alles auswählen

<h1 class="h2" data-testid="result-list-headline">9.828 Angebote entsprechen Deinen Suchkriterien</h1>
Wenn der Versuch mit Beautifulsoup auch geblockt wird, würde ich die Datei mit Python runterladen und dann die Zeichen wieder einlesen, dann kommst Du an die gewünschte Zahl.

Gruß
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@August1328: Die Frage ist wie Du an das HTML ran kommen willst ohne Selenium. Das <h1>-Element ist ja nicht nicht in der Antwort auf die URL aus dem ersten Beitrag. In *dem* HTML ist hauptsächlich JavaScript enthalten das dann weitere Inhalte nachlädt. Und die Seite wehrt sich recht deutlich gegen automatisierte Zugriffe. Man bekommt selbst mit dem Browser und abgeschaltetem JavaScript sehr schnell nur noch diese Meldung:

Code: Alles auswählen

Zugriff verweigert / Access denied


Reference Error: 0.2ddddd58.1663506546.efe6fa5

Leider koennen wir Ihnen an dieser Stelle keinen Zugriff auf unsere Daten gewaehren.
Sollten Sie weiterhin Interesse an einem Bezug unserer Daten haben, wenden sie sich bitte an:

Unfortunately, automated access to this page was denied.
If you are interested in accessing our data, please contact:

Phone (Montag bis Freitag von 8:00 bis 18:00 Uhr):
 *Private Nutzer und gewerbliche Anbieter: +49 (0) 30 81097-601
 *Händler: +49 (0) 30 81097-500

Mail: service@team.mobile.de

mobile.de GmbH
Albert-Einstein-Ring 26 | 14532 Kleinmachnow | Germany

Geschaeftsfuehrer: Patricia Lobinger
HRB‑Nr.: 18517 P, Amtsgericht Potsdam
Sitz der Gesellschaft: Kleinmachnow
Die wollen *wirklich* nicht, das die Seiten einfach so von jedem automatisiert ausgewertet werden.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
DeaD_EyE
User
Beiträge: 1020
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Server, Strom und Traffic müssen bezahlt werden. Einnahmen erzielt der Anbieter sicherlich durch Werbeanzeigen und Provisionen. Bots bringen weder das eine noch das andere, ergo wird alles unternommen, um das Parsen der Seite durch Bots zu verhindern.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
August1328
User
Beiträge: 65
Registriert: Samstag 27. Februar 2021, 12:18

OK, das ist wirklich ne umständliche Lösung, aber so geht´s :lol: :lol:

Für Google Chrome die Extension Autosave Webpage installieren und gewünschtes Download Intervall definieren - https://chrome.google.com/webstore/deta ... oi/related

Die Datei als .txt speichern und per Python einlesen.

Dann liefert das

Code: Alles auswählen

from bs4 import BeautifulSoup

with open('C:/Users/ah/Downloads/mobile.txt', 'r', encoding="utf-8") as file:
    data = file.read().replace('\n', '')

soup = BeautifulSoup(data, 'html.parser')

for h1 in soup.find_all('h1', {'class' : 'h2'}):
    print(h1)
dieses Ergebnis

Code: Alles auswählen

<h1 class="h2" data-testid="result-list-headline">9.820 Angebote entsprechen Deinen Suchkriterien</h1>
Iif it works it's not stupid... naja, oder man zahlt ein paar Euro für den Zugriff auf die API, was ich bevorzugen würde.

Gruß
Antworten