SyntaxError: can't assign to function call

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.
Pythagon
User
Beiträge: 63
Registriert: Mittwoch 3. Juli 2019, 18:21

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....
Hallo Snafu,

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.
Benutzeravatar
snafu
User
Beiträge: 6858
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Pythagon hat geschrieben: Samstag 13. Juli 2019, 17:48 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.
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/
Pythagon
User
Beiträge: 63
Registriert: Mittwoch 3. Juli 2019, 18:21

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.
Benutzeravatar
__blackjack__
User
Beiträge: 14020
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.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Pythagon
User
Beiträge: 63
Registriert: Mittwoch 3. Juli 2019, 18:21

__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.
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.

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
Das Ganze sieht dann so aus in der Konsole:
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
Ich bin happy, dass es endlich geklappt hat! =)

Vielen Dank an alle für eure Unterstützung!
Antworten