Seite 1 von 1
Wert aus Webseite auslesen
Verfasst: Freitag 16. September 2022, 05:51
von frad
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
Re: Wert aus Webseite auslesen
Verfasst: Freitag 16. September 2022, 07:37
von Sirius3
Jetzt sollten wir noch wissen, was Du versucht hast, und woran es konkret gescheitert ist.
Re: Wert aus Webseite auslesen
Verfasst: Freitag 16. September 2022, 08:44
von frad
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 ...
Re: Wert aus Webseite auslesen
Verfasst: Freitag 16. September 2022, 08:54
von noisefloor
Hallo,
ok - und was hat bei dir nicht funktioniert? Fehlermeldungen? Leeres Ergebnis? Falsches Ergebnis?
Gruß, noisefloor
Re: Wert aus Webseite auslesen
Verfasst: Freitag 16. September 2022, 08:58
von frad
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?
Re: Wert aus Webseite auslesen
Verfasst: Freitag 16. September 2022, 09:07
von __deets__
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.
Re: Wert aus Webseite auslesen
Verfasst: Freitag 16. September 2022, 09:12
von noisefloor
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
Re: Wert aus Webseite auslesen
Verfasst: Sonntag 18. September 2022, 13:44
von August1328
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
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ß
Re: Wert aus Webseite auslesen
Verfasst: Sonntag 18. September 2022, 14:16
von __blackjack__
@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.
Re: Wert aus Webseite auslesen
Verfasst: Sonntag 18. September 2022, 15:41
von DeaD_EyE
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.
Re: Wert aus Webseite auslesen
Verfasst: Sonntag 18. September 2022, 15:54
von August1328
OK, das ist wirklich ne umständliche Lösung, aber so geht´s
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ß