44 Stimmen

Wie kann ich eine HTML-Tabelle in eine CSV-Datei umwandeln?

Das Problem

Ich verwende bei der Arbeit ein Tool, mit dem ich Abfragen durchführen und HTML-Tabellen mit Informationen zurückerhalten kann. Ich habe keine Art von Back-End-Zugang zu diesem Tool.

Viele dieser Informationen wären sehr viel nützlicher, wenn ich sie in eine Tabelle eingeben könnte, um sie zu sortieren, Mittelwerte zu bilden usw. Wie kann ich diese Daten in eine CSV-Datei einlesen?

Meine erste Idee

Da ich mich mit jQuery auskenne, dachte ich, ich könnte damit die Tabellenformatierung auf dem Bildschirm entfernen, Kommas und Zeilenumbrüche einfügen und das ganze Durcheinander einfach in Notepad kopieren und als CSV-Datei speichern. Haben Sie eine bessere Idee?

Die Lösung

Ja, Leute, es war wirklich so einfach wie Kopieren und Einfügen. Komme ich mir nicht dumm vor?

Insbesondere musste ich beim Einfügen in das Arbeitsblatt die Option "Einfügen spezial" wählen und das Format "Text" auswählen. Andernfalls wurde versucht, alles in eine einzige Zelle einzufügen, auch wenn ich das gesamte Arbeitsblatt markiert hatte.

36voto

mkoeller Punkte 4389
  • Wählen Sie die HTML-Tabelle in der Benutzeroberfläche Ihres Tools aus und kopieren Sie sie in die Zwischenablage (falls dies möglich ist)
  • Fügen Sie sie in Excel ein.
  • Als CSV-Datei speichern

Dabei handelt es sich jedoch um eine manuelle und nicht um eine automatisierte Lösung.

13voto

Thorvaldur Punkte 501

Mit Python:

Stellen Sie sich zum Beispiel vor, Sie möchten Devisenkurse in CSV-Form von einer Website abrufen: fxquotes

dann...

from BeautifulSoup import BeautifulSoup
import urllib,string,csv,sys,os
from string import replace

date_s = '&date1=01/01/08'
date_f = '&date=11/10/08'
fx_url = 'http://www.oanda.com/convert/fxhistory?date_fmt=us'
fx_url_end = '&lang=en&margin_fixed=0&format=CSV&redirected=1'
cur1,cur2 = 'USD','AUD'
fx_url = fx_url + date_f + date_s + '&exch=' + cur1 +'&exch2=' + cur1
fx_url = fx_url +'&expr=' + cur2 +  '&expr2=' + cur2 + fx_url_end
data = urllib.urlopen(fx_url).read()
soup = BeautifulSoup(data)
data = str(soup.findAll('pre', limit=1))
data = replace(data,'[<pre>','')
data = replace(data,'</pre>]','')
file_location = '/Users/location_edit_this'
file_name = file_location + 'usd_aus.csv'
file = open(file_name,"w")
file.write(data)
file.close()

edit: um Werte aus einer Tabelle zu erhalten: Beispiel aus: palewire

from mechanize import Browser
from BeautifulSoup import BeautifulSoup

mech = Browser()

url = "http://www.palewire.com/scrape/albums/2007.html"
page = mech.open(url)

html = page.read()
soup = BeautifulSoup(html)

table = soup.find("table", border=1)

for row in table.findAll('tr')[1:]:
    col = row.findAll('td')

    rank = col[0].string
    artist = col[1].string
    album = col[2].string
    cover_link = col[3].img['src']

    record = (rank, artist, album, cover_link)
    print "|".join(record)

11voto

Juan A. Navarro Punkte 9676

Dies ist meine Python-Version, die die (derzeit) aktuellste Version von BeautifulSoup verwendet, die man z.B. über den folgenden Link erhalten kann,

$ sudo easy_install beautifulsoup4

Das Skript liest HTML aus der Standardeingabe und gibt den in allen Tabellen gefundenen Text im richtigen CSV-Format aus.

#!/usr/bin/python
from bs4 import BeautifulSoup
import sys
import re
import csv

def cell_text(cell):
    return " ".join(cell.stripped_strings)

soup = BeautifulSoup(sys.stdin.read())
output = csv.writer(sys.stdout)

for table in soup.find_all('table'):
    for row in table.find_all('tr'):
        col = map(cell_text, row.find_all(re.compile('t[dh]')))
        output.writerow(col)
    output.writerow([])

5voto

dkretz Punkte 36862

Noch einfacher (weil er es für Sie für das nächste Mal speichert) ...

In Excel

Daten/Externe Daten importieren/Neue Webabfrage

führt Sie zu einer Eingabeaufforderung für die URL. Geben Sie die URL ein, und die verfügbaren Tabellen auf der zu importierenden Seite werden abgegrenzt. Voilà.

5voto

n8henrie Punkte 2230

Dazu fallen mir zwei Möglichkeiten ein (vor allem für diejenigen unter uns, die kein Excel haben):

  • Google Spreadsheets hat eine ausgezeichnete importHTML función :
    • =importHTML("http://example.com/page/with/table", "table", index
    • Der Index beginnt bei 1
    • Ich empfehle eine copy y paste values kurz nach der Einfuhr
    • Datei -> Herunterladen als -> CSV
  • Python ist großartig Pandas Bibliothek hat praktische read_html y to_csv Funktionen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X