Ich habe versucht, Daten von einer Website herunterzuladen und dann in eine CSV-Datei zu speichern. Das Problem ist: Ich kann es nicht richtig speichern, um es zu lesen oder in eine Datenbank zu importieren.Python: Daten von BeautifulSoup in CSV speichern
ist hier mein Code:
import csv
import requests
from bs4 import BeautifulSoup
def getData(url_to_scrap='https://www.investing.com/currencies/eur-usd-historical-data', file=None, save_file="Name.csv"):
if url_to_scrap is not None:
header = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}
r = requests.get(url_to_scrap, headers=header)
data = BeautifulSoup(r.content, 'html.parser')
else:
data = BeautifulSoup(open(file, encoding='utf8'), 'html.parser')
table = data.find(id='curr_table')
table = table.find_all('td')
row_data = []
for row in table:
row_data.append(row.get_text('data-real-value'))
with open(save_file, 'w') as save:
for row in row_data:
writer = csv.writer(save, delimiter=';')
writer.writerow(row)
getData(save_file="EUR USD Historical Data.csv")
Und die Ausgabe auf der CSV-Datei:
M;a;y; ;3;1;,; ;2;0;1;7
1;.;1;2;1;8
1;.;1;1;7;2
1;.;1;2;2;0
....
Was ich brauche:
May 31, 2017;1.1218;1.1172;1.1220;1.1165;0.30%
Wenn Sie die Website überprüfen, ist alles in einer Tabelle und ich brauche es ähnlich in CSV. Was sollte ich ändern, damit es funktioniert?
ich danke Ihnen für Ihre Antwort, es machte das Skript besser, aber jetzt muss ich die zusätzlichen Leerzeilen in der CSV entfernen. Ich habe nur geändert ** 'öffnen (save_file, 'wb')' zu 'öffnen (save_file, 'w')' **. Wie kann ich die zusätzlichen Leerzeilen entfernen? edit: ** @ njoosse ** habe gerade den Link benutzt, um darüber zu lesen, und habe 'lineterminator = '\ n'' verwendet –
@VascoFerreira Hmm warum hast du wb zurück auf b gesetzt? Ich nehme an, Sie können die zusätzlichen Zeilenvorschübe entfernen, indem Sie wie vorgeschlagen "wb" verwenden. (Siehe [hier] (https://stackoverflow.com/questions/23835866/many-tutorials-on-writing-csv-files-have-the-mode-set-to-wb-why)) – lukeA
@VascoFerreira So Lineterminator wäre eine Alternative zu WB? Gut zu wissen. Wenn das Problem gelöst ist, können Sie eine Antwort wählen und sie als gelöst markieren. – lukeA