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
Wert aus Webseite auslesen
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 ...
https://gist.github.com/3ele-projects/5 ... __EYlzxkBA
Author: Sebastian Weiss
Vielleicht gibt es ja noch andere Wege ...
- 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
ok - und was hat bei dir nicht funktioniert? Fehlermeldungen? Leeres Ergebnis? Falsches Ergebnis?
Gruß, noisefloor
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?
[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?
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.
- 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.
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
das sieht stark nach eine Fehlermeldung von JavaScript aus, weil eine Bibliothek oder Funktion nicht (nach-) geladen werden kann.
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.vielleicht gibt es ja auch noch andere wege?
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
-
- 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 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:
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ß
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
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>
Gruß
- __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:
Die wollen *wirklich* nicht, das die Seiten einfach so von jedem automatisiert ausgewertet werden.
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
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
- 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
-
- User
- Beiträge: 65
- Registriert: Samstag 27. Februar 2021, 12:18
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
dieses Ergebnis
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ß
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)
Code: Alles auswählen
<h1 class="h2" data-testid="result-list-headline">9.820 Angebote entsprechen Deinen Suchkriterien</h1>
Gruß