.html -> Python Liste oder .xls
Verfasst: Samstag 9. März 2013, 16:51
Mein Ziel ist es eine Tabelle in einem html-Dokument in eine Excel-Datei umzuwandeln. Da ich aber nur Python als Programmiersprache kann will ich es in eine .csv-Datei umwandeln.
Damit ich eine .csv-Datei generieren kann, will ich das html-Dokument in ein mehrdimensionale Python-Liste konvertieren.
Dieser Code ist vereinfacht und strukturiert dargestellt (n**** steht für einen beliebigen String).
Im Prinzip soll die Liste so aussehen das für das für jede aufmachende Klammer (<...>) ein [ erstellt wird und für jede schließende Klammer (</...>) ein ]. Im Beispiel sollte die Liste so aussehen:
Noch besser wäre es wenn man alle <html>, <body> und <font> direkt ignoriert.
Danke für alle Antworten
Ich hoffe ich konnte mein Problem genau genug schildern, sodass jeder es versteht. Falls nicht versuche ich es dann noch einmal.
PS:
Über sowas wie
habe ich auch schon nachgedacht, doch dann könnte es passieren, dass der Bereich zwischen "<td>" in Zeile 11 und "</td>" in Zeile 37 und nicht der gewünschte Bereich (Z. 11 bis 13) gefunden wird. Auch re.findall("<td>.*?</td>", dt) hätte nicht den gewünschten Effekt, dort könnte dann z.B. der Bereich zwischen "<td>" in Zeile 7 und "</td>" in Zeile 3 gefunden werden.
PPS:
Vielleicht könnte man es mit einer Funktion versuchen die die aufmachenden (x += 1) und zumachenden (x -= 1) Klammern zählt, bis x wieder bei Null angekommen ist.
Damit ich eine .csv-Datei generieren kann, will ich das html-Dokument in ein mehrdimensionale Python-Liste konvertieren.
Code: Alles auswählen
01 <html>
02 <body>
03 <center>
04 <table>
05 <tbody>
06 <tr>
07 <td>
08 <table>
09 <tbody>
10 <tr>
11 <td>
12 1****
13 </td>
14 <td>
15 2****
16 </td>
17 </tr>
18 <tr>
19 <td>
20 3****
21 </td>
22 <td>
23 4****
24 </td>
25 </tr>
26 </tbody>
27 </table>
28 </td>
29 <td>
30 <table>
31 <tbody>
32 <tr>
33 <td>
34 <font>
35 5****
36 </font>
37 </td>
38 </tr>
39 </tbody>
40 </table>
41 </td>
42 </tr>
43 </tbody>
44 <table>
45 </center>
46 </body>
47 </html>
Im Prinzip soll die Liste so aussehen das für das für jede aufmachende Klammer (<...>) ein [ erstellt wird und für jede schließende Klammer (</...>) ein ]. Im Beispiel sollte die Liste so aussehen:
Code: Alles auswählen
[[[[[[[[[[[1****],[2****]],[[3****],[4****]]]]],[[[[[[5****]]]]]]]]]]]]
Danke für alle Antworten
Ich hoffe ich konnte mein Problem genau genug schildern, sodass jeder es versteht. Falls nicht versuche ich es dann noch einmal.
PS:
Über sowas wie
Code: Alles auswählen
import re
def einteilen(L, x):
reihenfolge = ["html", "body", "center", "table", "tbody", "tr", "td", "table", "tbody", "tr", "td"]
if x > len(reihenfolge)-1:
return L
Li = [einteilen(re.findall("<"+reihenfolge[x]+">.*</"+reihenfolge[x]+">"), x+1) for e in L]
return Li
d = open("datei.html")
dt = d.read()
einteilen(dt, 0)
PPS:
Vielleicht könnte man es mit einer Funktion versuchen die die aufmachenden (x += 1) und zumachenden (x -= 1) Klammern zählt, bis x wieder bei Null angekommen ist.