Gewonnene Daten in CSV speichern

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.
Antworten
Bebbi
User
Beiträge: 144
Registriert: Dienstag 21. April 2020, 19:21

Hallo zusammen

Wieder einmal stehe ich vor einem unlösbaren Problem. Ich habe mit Webscraping diverse Informationen von einer Website gewonnen. Die Informationen habe ich mit folgendem Befehl generiert und entsprechen dem gewünschten Resultat.

Code: Alles auswählen

element = driver.find_element_by_id("quoteNewsStream-0-Stream")
titles = element.find_elements(By.TAG_NAME, 'h3')
sections = element.find_elements(By.TAG_NAME, 'p')
dates = element.find_elements(By.TAG_NAME, 'span')
Wenn ich mir die oben generierten Angaben mit folgendem Code anzeigen lasse, werden diese wie gewünscht dargestellt:

Code: Alles auswählen

i = 0
g = len(titles)
while i < g:
  print(dates[i].text)
  print('\n')
  print(titles[i].text)
  print('\n')
  print(sections[i].text)
  print('\n')
  i += 1
  
Soweit so gut. Jetzt würde ich allerdings die gewonnen Daten gerne in einem CSV-File abspeichern. Dazu habe ich folgenden Code erstellt:

Code: Alles auswählen

path1 = "C:/Users/Startklar/Documents/Python Scripts/Testdatei.xlsx"
workbook = openpyxl.load_workbook(path1)
sheet = workbook.active

Code: Alles auswählen

for r in range(1,5):
    for c in range(1,4):
        sheet.cell(row=r,column=c).value.titles[i].text
        
workbook.save(path1)
Dabei wird mir folgende Fehlermeldung angezeigt:

---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-799-2d9ee8198004> in <module>
1 for r in range(1,5):
2 for c in range(1,4):
----> 3 sheet.cell(row=r,column=c).value.titles.text
4
5 workbook.save(path1)

AttributeError: 'NoneType' object has no attribute 'titles'

Jetzt habe ich leider keine Ahnung was das genau heisst und bedeutet, kann mir jemand dabei helfen?
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich weiß nicht, in welcher Programmiersprache Du programmierst, aber vielleicht wäre Python ganz angebracht:

Code: Alles auswählen

for date, title, section in zip(dates, titles, sections):
    print(date.text)
    print(title.text)
    print(section.text)
Wie kommst Du darauf, dass das values-Attribut einer Zelle ein titles-Attribut hätte. Wo hast Du das her?
Benutzeravatar
__blackjack__
User
Beiträge: 14054
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wobei ich da noch einen Schritt weiter vorne ansetzen würde: es sollte nicht diese verschiedenen Listen geben wo die Elemente am gleichen Index zusammengehören. Zusammengehörende Daten in *eine* Liste. Beim Auslesen aus dem HTML scheinen die ja noch alle beisammen zu sein, warum werden sie an der Stelle dann auf verschiedene Listen aufgeteilt.

Titel und Beitrag vom Thema passen auch nicht so ganz zum Code denn dort scheint eine Exceltabelle geschrieben zu werden und keine CSV-Datei.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten