Seite 1 von 1

Werte aus PHPfeed auslesen und in CSV datei schreiben

Verfasst: Freitag 29. Oktober 2021, 14:04
von alfer
Hallo,

ich möchte aus dieser url

https://de.marketscreener.com/reuters_c ... s&iLang=3
die Daten auslesen und in eine csv datei schreiben.

Wenn ich diesen code benutze:

Code: Alles auswählen

import requests
import bs4
import csv
from csv import writer

url = "https://de.marketscreener.com/reuters_charts/afDataFeed.php?codeZB=44211922&t=dcons&iLang=3"    
response = requests.get(url)
soup = bs4.BeautifulSoup(response.content, "html.parser")

with open("C:/analysten_data.csv", "w", encoding="utf-8", newline="") as csv_file:
        writer = csv.writer(csv_file, delimiter=";")
        writer.writerow(soup)
Schreibt python mir das:
[[{"name":"Kaufen","y":9,"color":"#009900"},{"name":"Aufstocken","y":7,"color":"#00CC00"},{"name":"Halten","y":6,"color":"#EEF200"},{"name":"Reduzieren","y":2,"color":"#FFAE00"},{"name":"Verkaufen","y":3,"color":"#FF0000"},{"name":"Ohne Meinung","y":0,"color":"#434343"}],["Kaufen","Aufstocken","Halten","Reduzieren","Verkaufen","Ohne Meinung"],"",true]
Ich will aber nur die Zahlen extrahieren, also müsste es so aussehen:
9;7;6;2;3;0
Jemand eine Idee wie ich das hinbekomme?

Re: Werte aus PHPfeed auslesen und in CSV datei schreiben

Verfasst: Freitag 29. Oktober 2021, 14:29
von Sirius3
Warum gehst du auf einen JSON-String mit BeautifulSoup los?
Da benutzt man response.json() und bearbeitet diese wie jede andere Pythonstruktur auch.

Re: Werte aus PHPfeed auslesen und in CSV datei schreiben

Verfasst: Freitag 29. Oktober 2021, 17:50
von alfer
Danke erstmal für deine Antwordt. Json hatte ich probiert, bekam aber ständig eine Fehlermeldung. Dank deines Hinweisses hab ich nochmal genauer recheriert.

Code: Alles auswählen

import requests
import json

url = "https://de.marketscreener.com/reuters_charts/afDataFeed.php?codeZB=44211922&t=dcons&iLang=3"
response = requests.get(url)

soup = response.json()

print(soup)
Mit response.json() gibt er mir das wieder:

Code: Alles auswählen

[[{'name': 'Kaufen', 'y': 9, 'color': '#009900'}, {'name': 'Aufstocken', 'y': 7, 'color': '#00CC00'}, {'name': 'Halten', 'y': 6, 'color': '#EEF200'}, {'name': 'Reduzieren', 'y': 2, 'color': '#FFAE00'}, {'name': 'Verkaufen', 'y': 3, 'color': '#FF0000'}, {'name': 'Ohne Meinung', 'y': 0, 'color': '#434343'}], ['Kaufen', 'Aufstocken', 'Halten', 'Reduzieren', 'Verkaufen', 'Ohne Meinung'], '', True]
Dann bekomme ich aber diese Fehlermeldung auf https://jsonformatter.org/:

Code: Alles auswählen

Parse error on line 1:
[[{'name': 'Kaufen', 'y
---^
Expecting 'STRING', '}', got 'undefined'
Mit bs4 bekomme ich zumindest keine Fehlermeldung auf jsonformatter

Code: Alles auswählen

import requests
import bs4
import csv
from csv import writer

url = "https://de.marketscreener.com/reuters_charts/afDataFeed.php?codeZB=44211922&t=dcons&iLang=3"    
r = requests.get(url)
soup = bs4.BeautifulSoup(response.content, "html.parser")

print(soup)
Allerdings, stimmt die Reihenfolge dann nicht mehr. Der ideale jsoncode sieht auf jsonmatter so aus:

Code: Alles auswählen

  [{"name":"Kaufen","y":9,"color":"#009900"},{"name":"Aufstocken","y":7,"color":"#00CC00"},{"name":"Halten","y":6,"color":"#EEF200"},{"name":"Reduzieren","y":2,"color":"#FFAE00"},{"name":"Verkaufen","y":3,"color":"#FF0000"},{"name":"Ohne Meinung","y":0,"color":"#434343"}]   
Damit bekomme ich genau die CSV die ich gerne möchte:

Code: Alles auswählen

name,y,color
Kaufen,9,#009900
Aufstocken,7,#00CC00
Halten,6,#EEF200
Reduzieren,2,#FFAE00
Verkaufen,3,#FF0000
Ohne Meinung,0,#434343
Nur schaffe ich es leider nicht dies in Python so hin zu bekommen... da ich die url variable machen will, ist es zuviel aufwand alles mit der Hand zu editieren.

Re: Werte aus PHPfeed auslesen und in CSV datei schreiben

Verfasst: Freitag 29. Oktober 2021, 18:07
von Sirius3
Was willst Du denn mit https://jsonformatter.org/?
Du mußt doch nur das richtige Wörterbuch aus der Struktur herausholen und mit csv.Dictwriter hast Du dann auch schon Dein gewünschtes csv-Format.

Re: Werte aus PHPfeed auslesen und in CSV datei schreiben

Verfasst: Freitag 29. Oktober 2021, 18:13
von rogerb
@alfer,

die gewünschten Daten liegen in einer Liste aus Dictionaries, die wieder in einer Liste liegt. Das ist etwas merkwürdig, aber kein Problem. Wenn du mit JSON arbeitest, brauchst du aber BeautifulSoup nicht mehr. Das ist doch wesentlich angenehmer.

Code: Alles auswählen

import requests
import csv

url = "https://de.marketscreener.com/reuters_charts/afDataFeed.php?codeZB=44211922&t=dcons&iLang=3"
response = requests.get(url)
data = response.json()


with open("C:\analysten_data.csv", "w", encoding="utf-8", newline="") as csv_file:
    writer = csv.writer(csv_file, delimiter=";")
    writer.writerow(["name", "y", "color"])
    for row in data[0]:
        writer.writerow(row.values())


"""
csv-Datei:

name;y;color
Kaufen;9;#009900
Aufstocken;7;#00CC00
Halten;6;#EEF200
Reduzieren;2;#FFAE00
Verkaufen;3;#FF0000
Ohne Meinung;0;#434343
"""
Edit:
Die von Sirius3 erwähnte DictWriter Methode:

Code: Alles auswählen

with open("C:\analysten_data.csv", "w", encoding="utf-8", newline="") as csv_file:
    fieldnames = ["name", "y", "color"]
    writer = csv.DictWriter(csv_file, fieldnames=fieldnames, delimiter=";")
    writer.writeheader()
    for row in data[0]:
        writer.writerow(row)

Re: Werte aus PHPfeed auslesen und in CSV datei schreiben

Verfasst: Freitag 29. Oktober 2021, 18:21
von Sirius3
@rogerb: wie ich schon schrieb, ist DictWriter das richtige. Du berücksichtigst die Schlüssel gar nicht, und hoffst, dass die Werte in der richtigen Reihenfolge kommen.

Code: Alles auswählen

import requests
import csv

url = "https://de.marketscreener.com/reuters_charts/afDataFeed.php?codeZB=44211922&t=dcons&iLang=3"
response = requests.get(url)
data = response.json()

with open("C:/analysten_data.csv", "w", encoding="utf-8", newline="") as csv_file:
    writer = csv.DictWriter(csv_file, ["name", "y", "color"], delimiter=";")
    writer.writeheader()
    writer.writerows(data[0])

Re: Werte aus PHPfeed auslesen und in CSV datei schreiben

Verfasst: Freitag 29. Oktober 2021, 18:23
von rogerb
@Sirius3, völlig richtig, hat sich jetzt etwas überschnitten...

Re: Werte aus PHPfeed auslesen und in CSV datei schreiben

Verfasst: Freitag 29. Oktober 2021, 18:54
von alfer
Vielen Dank funktioniert wunderbar, schönes Wochende wünsche ich euch!!!