2008-09-16 17 views
3

Ich versuche, eine HTML-Tabelle zu kratzen und ihre Daten in einer Datenbank zu speichern. Welche Strategien/Lösungen haben Sie bei diesem Programm gefunden?Speichern von HTML-Tabellen in einer Datenbank

Ich bin am wohlsten mit Java und PHP, aber wirklich eine Lösung in jeder Sprache wäre hilfreich.

EDIT: Für weitere Details bietet die UTA (Salt Lake's Bus System) Busfahrpläne auf seiner Website. Jeder Zeitplan wird in einer Tabelle mit Stationen in der Kopfzeile und Abfahrtszeiten in den Zeilen angezeigt. Ich würde gerne die Zeitpläne durchgehen und die Informationen in der Tabelle in einer Form speichern, die ich dann abfragen kann.

Hier ist die starting point für die Zeitpläne

+0

Ihr Link ist kaputt :( – 5arx

Antwort

1

ich versucht habe, Screen-Scraping vor, aber ich fand es sehr spröde sein, vor allem mit dynamisch generierter Code. Ich habe einen DOM-Parser eines Drittanbieters gefunden und benutze ihn, um den Quellcode mit Regex-ähnlichen Mustern zu durchsuchen, um die benötigten Daten zu finden.

Ich schlug vor, herauszufinden, ob die Besitzer der Website eine veröffentlichte API (oft Web Services) zum Abrufen von Daten von ihrem System haben. Wenn nicht, dann viel Glück für Sie.

+0

Leider keine API auf der Website, sonst wäre das ideal. –

2

Ich habe festgestellt, dass Skriptsprachen im Allgemeinen für solche Aufgaben besser geeignet sind. Ich persönlich bevorzuge Python, aber PHP wird auch funktionieren. Das Hacken, Zerkleinern und Parsen von Strings in Java ist einfach zu viel Arbeit.

+0

lol, fast alles in Java ist zu viel Arbeit. –

1

Dies ist bei weitem die einfachste mit Perl sein würde und die folgenden CPAN Module:

CPAN die Hauptverteilung auf Mechanismus für Perl-Module und Accessi ble durch den folgenden Shell-Befehl, zum Beispiel ausgeführt wird:

# cpan HTML::Parser

Wenn Sie unter Windows sind, dann wird es interessanter sein, aber man kann es immer noch tun: http://www.perlmonks.org/?node_id=583586

1

pianohacker das HTML::TableExtract Modul übersehen , die für genau diese Art von Ding entworfen wurde. Sie benötigen weiterhin LWP, um die Tabelle abzurufen.

1

Wenn das, was Sie wollen ein Formular ist eine CSV-Tabelle, dann können Sie diese verwenden: Python:

zum Beispiel vorstellen, dass Sie Forex-Zitate in csv Form kratzen wollen von einer Website wie: fxoanda

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() 

Sobald Sie es in dieser Form haben, können Sie die Daten in jede Form konvertieren, die Sie mögen.

1

Bei dem Risiko, hier auf SO einen Shitstorm zu starten, würde ich vorschlagen, dass, wenn das Format der Tabelle sich nie ändert, Sie mit Regulexpressions nur durchkommen können, um den Inhalt zu analysieren und zu erfassen, den Sie benötigen.

+0

Zweieinhalb Jahre weiter und es gab keinen 5hitstorm. Ace. – 5arx

Verwandte Themen