Forum: PC-Programmierung Python Web Scraping: Interaktiver Link / Button


von Dirac I. (dirac-impuls)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

wie könnte man mit Python von der Seite 
https://www.onvista.de/index/einzelwerte/S-P-500-Index-4359526 die 
Aktien des Aktienindex S&P500 auslesen? Die erste Seite mit den ersten x 
Aktien sind kein Problem, aber wie kommt man auf die zweite bis elfte 
Seite?

1
import urllib3
2
from bs4 import BeautifulSoup
3
4
link='https://www.onvista.de/index/einzelwerte/S-P-500-Index-4359526'
5
6
user_agent='Mozilla/4.5 (Windows NT 9.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/117.0'
7
pm = urllib3.PoolManager(10, headers={'user-agent': user_agent})
8
response = pm.urlopen('GET', link)
9
soup = BeautifulSoup(response.data, 'html.parser')
10
section = soup.find('section', {'class': 'grid'})
11
pagination = section.find('div', {'class': 'pagination--container-center'})
12
print(pagination)

In der pagination-Antwort befindet sich der Code für die 'Links' zu den 
Seiten zwei bis elf: Siehe Anhang (µC.net meint in dem Code Spam zu 
erkennen, daher nur als Screenshot)

Außerdem findet man den 'Nächste Seite' Button:
1
<div class="pagination__button pagination__button--right">
2
  <button aria-label="Nächste Seite">
3
   <span class="icon icon--SvgCdAngleRight16 icon--size-16">
4
    <svg class="icon__svg" viewbox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
5
       <path d="M6 13c-.26 0-.51-.1-.71-.29a.996.996 0 010-1.41L8.59 8l-3.3-3.29A.996.996 0 116.7 3.3l4 4c.39.39.39 1.02 0 1.41l-4 4c-.19.19-.44.29-.7.29z" fill="currentColor"></path>
6
    </svg>
7
   </span>
8
  </button>
9
</div>

Damit kommt man glaube ich nicht weiter, da die Links und der Button 
keinen href-Link enthalten. Hat jemand eine Idee, wie man die anderen 
Seiten auslesen kann?

Danke und viele Grüße

von Ein T. (ein_typ)


Lesenswert?

Dirac I. schrieb:
> wie könnte man mit Python von der Seite
> https://www.onvista.de/index/einzelwerte/S-P-500-Index-4359526 die
> Aktien des Aktienindex S&P500 auslesen? Die erste Seite mit den ersten x
> Aktien sind kein Problem, aber wie kommt man auf die zweite bis elfte
> Seite?

Wenn Du mit Aktien $reich werden willst -- welch originelle Idee! -- 
dann solltest Du Dir einen Anbieter suchen, der Dir die aktuellen(!) 
Daten zur Verfügung stellt, zum Beispiel per REST-API. Viele Anbieter 
stellen ihre Daten gegen Einwurf kleiner Münzen gerne zur Verfügung. 
HTH, YMMV, SCNR.

von Εrnst B. (ernst)


Angehängte Dateien:

Lesenswert?

Mach die Seite mal mit dem Browser auf, öffne die Entwickler-Konsole, 
und schau dir die Requests an, die da per XHR gemacht werden.

Da ist einer dabei, auf 'api.onvista.de/constituents', Aufruf-Parameter 
u.A. "page=1, perPage=50" der ein schönes JSON-Array mit 50 Einträgen 
ausspuckt, mit allen Daten die du dir wünschen könntest, und noch viel 
mehr...

Hab die Daten des ersten Eintrags auf der zweiten Seite mal teilweise 
aufgeklappt, sh. Screenshot, und die Rohdaten der Seite auch angehängt.

d.H.: Mach dir nicht zuviel Arbeit mit dem Scraping aus dem HTML, greif 
die Daten direkt an der Quelle ab.

von Markus W. (dl8mby)


Lesenswert?

Mein bescheidener Senf dazu via bash,
da ich auch an sowas Interesse habe.
1
for i in `seq 1 1 9` 
2
do curl -s -o tmp_${i}.json 'https://api.onvista.de/api/v2/indices/4359526/constituents?order=ASC&page='${i}'&perPage=50&pricePerformanceType=INTRADAY&sort=NAME' 
3
sleep 1 
4
done
5
6
Beispiel
7
8
cat tmp_1.json | jq -r '."list"[]."instrument"."urls"."WEBSITE"'

Markus

von Some O. (some_one)


Lesenswert?

Markus W. schrieb:
> [pre]
> for i in `seq 1 1 9`
> do curl -s -o tmp_${i}.json
> 
'https://api.onvista.de/api/v2/indices/4359526/constituents?order=ASC&page='${i}'&perPage=50&pricePerformanceType=INTRADAY&sort=NAME';
> sleep 1
> done

Nice: der Erste weist darauf hin, dass die Kinder der Entwickler bei 
Onvista hungern müssen. Wenn deren Daten geklaut werden, der nächste 
gibt Hinweise, wie der Api-Aufruf zum Klauen aussieht. Und der Dritte 
zeigt das dann gleich en Detail in grausigem Bash-Code. Die Daten sind 
dann zwar laut Aussage von Nr. 1 nicht aktuell, aber egal.

Ihr seid super, Leute, genau mein Humor!

: Bearbeitet durch User
von Dirac I. (dirac-impuls)


Lesenswert?

@Ein T.:

vielen Dank für den Hinweis. Ich werde mir die Alternativen mal 
anschauen.

@ Ernst und Markus:

Vielen Dank für die Hilfe! :-) Ich kann euch leider nicht folgen, wie 
genau ihr auf api.onvista gekommen seid. Ich habe in Mozilla, Edge und 
Chrome die Entwicklerkonsole auf der Seite gestartet, habe aber unter 
"Elemente" / "Konsole" / "Debugger" / "Quellen" die API nicht gefunden. 
Wo genau habt ihr den Link her?

Danke nochmal und viele Grüße

von Markus W. (dl8mby)


Lesenswert?

@Dirac I.,


beim Firefox z.B. die F12 Taste zum Aufruf der DevTools starten.
Reiter Network wählen. Seite neu Laden
1
https://www.onvista.de/index/einzelwerte/S-P-500-Index-4359526
und im Tab die Zeile mit dem Request 'quote_list' (Spalte File) an den 
Server anklicken.
Auf der rechten Seite im Fenster im Tab Headers, siehst Du den
1
https://api.onvista.de/api/v1/instruments/quote_list
API Link neben Options.

Markus

von Dirac I. (dirac-impuls)


Lesenswert?

Super, hab's gefunden. :-)

Vielen Dank für die Hilfe!

Viele Grüße

Dirac

von Oliver (imonbln)


Lesenswert?

Εrnst B. schrieb:
> Da ist einer dabei, auf 'api.onvista.de/constituents', Aufruf-Parameter
> u.A. "page=1, perPage=50" der ein schönes JSON-Array mit 50 Einträgen
> ausspuckt, mit allen Daten die du dir wünschen könntest, und noch viel
> mehr...

Statt die Seiten einzeln zu scannen, könnte es sich lohnen den PerPage 
auf 500 zu setzten, dann gibt es vielleicht alles auf einmal.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.