Bitte ignorieren. Habe die while Schleife nun erfolgreich ersetzt. Funktioniert wunderbar! Besten Dank!Pythagon hat geschrieben: ↑Samstag 13. Juli 2019, 15:31Darufhin bekomme ich folgende Fehlermeldung:kbr hat geschrieben: ↑Samstag 13. Juli 2019, 15:21 Zumindest die while-Schleife kannst Du schon einmal ersetzen durch:
Code: Alles auswählen
start = index + 22 cookiecrumb = html[start:html.index('"', start)]
cookiecrumb = html[start:html.index('"', start)][/code]
^
SyntaxError: invalid syntax
SyntaxError: can't assign to function call
- __blackjack__
- User
- Beiträge: 13107
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Pythagon: Wie und wo autorisierst Du Dich denn? Da wird doch wohl mehr erforderlich sein als vorher eine andere Seite abzurufen und da einen Parameter aus JavaScript-Code zu fischen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Ich war jetzt davon ausgegangen es würde genügen den Cookiecrumb mit dem Link zu übergeben aber anscheinend erkennt Yahoo nicht, dass es sich um ein und die selbe Http-Session handelt und generiert bei jedem neuen Zugriff erneut einen anderen Cookiecrumb. Grundsätzlich sind diese csv files frei zugänglich. Man muss sich also weder einloggen, noch anderweitig authorisieren. Es muss lediglich die Cookieabfrage von Yahoo bestätigt werden wenn man das ganze mit einem Browser vornimmt.
Muss ich eine Session ID festlegen und diese mit übergeben mit jeder Anfrage?
Muss ich eine Session ID festlegen und diese mit übergeben mit jeder Anfrage?
Evtl mal mit mechanize probieren. Ein paar Codebeispiele:
https://mechanize.readthedocs.io/en/latest/#quickstart
Das verhält sich noch ein bißchen ähnlicher wie ein Browser und löst das Problem mit den Cookies möglicherweise.
An welche Daten möchtest du denn genau kommen? Ich spreche hier natürlich vom eigentlichen Ziel und nicht von deinen Versuchen mit dem Cookiecrumb. Vielleicht liefert dir dann jemand eine Lösung oder zumindest entscheidende Schritte zum Weiterkommen....
https://mechanize.readthedocs.io/en/latest/#quickstart
Das verhält sich noch ein bißchen ähnlicher wie ein Browser und löst das Problem mit den Cookies möglicherweise.
An welche Daten möchtest du denn genau kommen? Ich spreche hier natürlich vom eigentlichen Ziel und nicht von deinen Versuchen mit dem Cookiecrumb. Vielleicht liefert dir dann jemand eine Lösung oder zumindest entscheidende Schritte zum Weiterkommen....
Hallo Snafu,snafu hat geschrieben: ↑Samstag 13. Juli 2019, 17:33 Evtl mal mit mechanize probieren. Ein paar Codebeispiele:
https://mechanize.readthedocs.io/en/latest/#quickstart
Das verhält sich noch ein bißchen ähnlicher wie ein Browser und löst das Problem mit den Cookies möglicherweise.
An welche Daten möchtest du denn genau kommen? Ich spreche hier natürlich vom eigentlichen Ziel und nicht von deinen Versuchen mit dem Cookiecrumb. Vielleicht liefert dir dann jemand eine Lösung oder zumindest entscheidende Schritte zum Weiterkommen....
mechanize wollte ich zunächst auch dafür verwenden aber es ist leider ungeeignet da es nicht in der Lage ist den HTML Code des PopUp-Fenster für die Cookieabfrage , welches beim Öffnen von Yahoo auftaucht, zu identifizieren.
Ich möchte csv-Files für historische Dividenden und Kursdaten bei Yahoo-Finance ziehen. Ich habe das jahre lang mit VBA gemacht aber seit Kurzem wird IE11 nicht mehr vollständig unterstützt bei Yahoo und somit muss ich einen Teil des Codes auslagern in Python.
Mir wurde im VBA Forum mitgeteilt ein Http-Session Objekt, wie Python es bietet, würde das Problem lösen weil die Cookie Information beständig wäre für alle Reuqests, die über das Session-Objekt stattfinden. Ich möchte praktisch mit dem Session-Objekt eine Browser-Session imitieren wenn man so will. Allerdings nehme ich an, dass ich der Session in irgendeiner Weise noch einen Wert für ein Attribut hinzufügen muss damit dieser dieses bei jeder Anfrage mit übergibt, so dass die Webseite jedes mal erkennt es ist die gleiche Http-Session.
Für Tipps wäre ich dankbar denn alles was ich dazu finde ist schwer verständlich wenn man von Http-Requests wenig Ahnung hat.
Das heißt, du hast eine Schnittstelle zum IE über VBA benutzt? So etwas ähnliches gibt es für Python auch. Es ist eine Anbindung an Selenium. Dabei wird auch JavaScript automatisch ausgeführt.
https://pypi.org/project/selenium/
Ich hatte in VBA zunächst auch versucht das Problem mit Selenium und Firefox zu lösen aber Firefox benötigt seit einer der neueren Versionen einen Treiber, der von Selenium nicht unterstützt wird. Aber wie ich auf dem Link von Dir sehe unterstützt Python noch andere Browser, die ich dafür vielleicht verwenden könnte. ich werde das auf jeden Fall später versuchen.
Trotzdem fände ich es immer noch interessant zu wissen wie man das Problem mit einem Session Objekt und Http Requests lösen kann denn das Objekt bietet eine ganze Reihe von Methoden in Bezug auf Cookies mit denen es vermutlich möglich ist. Ich weiß nur nicht welche davon relevant sind und wie man sie anwendet und auch Googlen hat bis jetzt nicht weiter geholfen.
Trotzdem fände ich es immer noch interessant zu wissen wie man das Problem mit einem Session Objekt und Http Requests lösen kann denn das Objekt bietet eine ganze Reihe von Methoden in Bezug auf Cookies mit denen es vermutlich möglich ist. Ich weiß nur nicht welche davon relevant sind und wie man sie anwendet und auch Googlen hat bis jetzt nicht weiter geholfen.
- __blackjack__
- User
- Beiträge: 13107
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Pythagon: Als erstes müsste man schauen was der Browser macht, also was der so alles bekommt und sendet, und dann wie man diese Information nachbasteln kann. Wobei wenn das schon Sachen aus JavaScript gefischt werden müssen, ist auch nicht auszuschliessen, das man auch tatsächlich das JavaScript ausführen muss, damit es funktioniert. Yahoo mag keine automatisierten Zugriffe und wehrt sich sehr wahrscheinlich dagegen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Ich hab noch ein wenig gegoogelt und bin tatsächlich schlauer geworden. Die Lösung ist trivial. Einfach beim zweiten Http-Request das "get" durch "post" ersetzen.__blackjack__ hat geschrieben: ↑Samstag 13. Juli 2019, 19:24 @Pythagon: Als erstes müsste man schauen was der Browser macht, also was der so alles bekommt und sendet, und dann wie man diese Information nachbasteln kann. Wobei wenn das schon Sachen aus JavaScript gefischt werden müssen, ist auch nicht auszuschliessen, das man auch tatsächlich das JavaScript ausführen muss, damit es funktioniert. Yahoo mag keine automatisierten Zugriffe und wehrt sich sehr wahrscheinlich dagegen.
Code: Alles auswählen
#Get Yahoo Finance CSV-File
import requests
session = requests.session()
page = session.get("https://de.finance.yahoo.com/quote/DAI.DE/history?period1=1405116000&period2=1562882400&interval=div%7Csplit&filter=div&frequency=1d")
cookiecrumb1 = page.cookies.get
print(cookiecrumb1)
#session.cookies.set_cookie(cookiecrumb1)
#
link = "https://query1.finance.yahoo.com/v7/finance/download/DAI.DE?period1=1405202400&period2=1562968800&interval=1d&events=div&crumb=%s/" % (cookiecrumb1)
#
#print(link)
#
csvfile = session.post(link)
#
print(csvfile.text)
session.close
Ich bin happy, dass es endlich geklappt hat! =)runfile('C:/Users/Public/Geldanlage & Börse/Pivot Tabellen & Auswertungen/Dividendenbewertung/DivTool 1.5 - CSV Scraper.py', wdir='C:/Users/Public/Geldanlage & Börse/Pivot Tabellen & Auswertungen/Dividendenbewertung')
<bound method RequestsCookieJar.get of <RequestsCookieJar[Cookie(version=0, name='B', value='16qm4qdeikft3&b=3&s=in', port=None, port_specified=False, domain='.yahoo.com', domain_specified=True, domain_initial_dot=True, path='/', path_specified=True, secure=False, expires=1594585891, discard=False, comment=None, comment_url=None, rest={}, rfc2109=False)]>>
Date,Dividends
2015-04-02,2.45
2017-03-30,3.25
2016-04-07,3.25
2019-05-23,3.25
2018-04-06,3.65
Vielen Dank an alle für eure Unterstützung!