2009-08-09 3 views
0

Ich muss eine große Website von statischen HTML vollständig von Menschen geschrieben in richtige relationale Daten konvertieren. Zuerst kommt eine große Menge von Tabellen (nicht notwendigerweise die gleiche für jede Seite), dann Code wie folgt:Tools für Data Mining handgeschriebenen HTML

<a name=pidgin><font size=4 color=maroon>Pidgin</font><br></a> 
<font size=2 color=teal>Author:</font><br> 
<font size=2>Sean Egan</font><br> 
<font size=2 color=teal>Version:</font><br> 
<font size=2>2.6.8</font><br> 
<font size=2><a href="http://pidgin.im/"><br> 
    <img src="images/homepage.jpg"></a> 
</font><br> 
<br><br><br> 

<a name=psi><font size=4 color=maroon>Psi</font><br></a> 
<font size=2 color=teal>Version:</font><br> 
<font size=2>0.13</font><br> 
<font size=2 color=teal>Screenshots:</font><br> 
<a href="images/screenshots/psi/1.jpg"> 
    <img src="images/screenshots/psi/1_s.jpg"> 
</a> 
<a href="images/screenshots/psi/2.jpg"> 
    <img src="images/screenshots/psi/2_s.jpg"> 
</a><br> 
<br><br><br> 

und dann wieder einige Tische. Ich habe versucht, einen HTML-Parser zu verwenden und nach einem [Name] (einem CSS-Selektor) zu suchen, aber ich habe immer einige Einträge verloren: manchmal denkt man, dass einige Einträge in jedem von ihnen sind, weil sie nicht von zivilen Personen geschrieben wurden andere anstelle einer flachen Liste. Im Moment verwende ich einige Vim-Regexes, die in eine Funktion gruppiert sind, die diesen Code in XML umwandeln, aber das ist auch kein Wundermittel: Die meisten Ausgabedateien sind nicht wohlgeformt, weil etwas HTML hineingerutscht ist.

So Ich frage mich, welche Tools existieren, um solche Aufgaben zu erledigen?

Antwort

1

Wenn Sie mit Python vertraut sind, wurde BeautifulSoup genau dieses Problem zu lösen erstellt:

„Sie schreiben nicht diese schreckliche Seite Sie sind nur einige Daten aus ihm heraus zu bekommen versuchen.“

Ich habe BeautifulSoup verwendet, um diese Art von Arbeit vor, und es ist sehr gut.

+0

Danke, aber ich habe bereits versucht Parsing. Nicht, dass es zu schrecklich ist, aber die Struktur der Original-Code ist nicht zu freundlich dafür. Wie Sie in meinem Codebeispiel sehen können, handelt es sich um eine flache Liste anstelle von etwas, das in divs oder Tabellen verschachtelt ist. –

3

Das erste, was zu tun wäre, um Ihre Eingabe HTML durch ein Tool wie HTML Tidy zu werfen, um zumindest sicherzustellen, es ist gültig (X) HTML. Dann würde ich eine Art dom-basierte Analyse (statt Reg-Ex) verwenden, um den Code zu durchlaufen.

+0

Danke, aber HTML Tidy selbst hilft nicht: Die Reihenfolge der öffnenden und schließenden Tags im Code, den ich analysieren muss, ist so durcheinander, dass es jedes Mal anders verschachtelt erscheint. So endet es in einem DOM-Parser. –

Verwandte Themen