ubuntuusers.de

Python: lxml, html5lib, BeautifulSoup, etc.

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

VerirrterMaccer

Anmeldungsdatum:
29. November 2007

Beiträge: 31

Moin, ich hab mich schon eine Weile nicht mehr mit Python beschäftigt und mit XML eigentlich auch noch nie so richtig. Ich möchte gerne genau solche Daten wie unten - openstreetmap - ver-/bearbeiten und weiß nicht genau, welches von den Modulen aus dem Betreff ich hierfür am Besten verwende. Eigentlich suche ich nach dem _Komfortabelsten_. Wenn's bei großen Datenmengen 10 Sekunden länger dauert kann ich da besser mit leben als mit Streß beim Arbeiten.

Kann mir da wer weiterhelfen?

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
<?xml version="1.0" encoding="UTF-8"?>
<osm version="0.5" generator="OpenStreetMap server">
  <bounds minlat="53.557841" minlon="9.878675" maxlat="53.560802" maxlon="9.883803"/>
  <node id="27310036" lat="53.5581299" lon="9.8820263" user="Jörn" visible="true" timestamp="2008-02-09T16:27:27+00:00">
    <tag k="created_by" v="JOSM"/>
  </node>
  <node id="105336411" lat="53.5589967" lon="9.8811079" user="Jörn" visible="true" timestamp="2008-02-09T16:27:36+00:00"/>
  <node id="105336412" lat="53.5590171" lon="9.8816486" user="Jörn" visible="true" timestamp="2008-02-09T16:27:39+00:00"/>
  <node id="190069705" lat="53.559068" lon="9.8813396" user="Jörn" visible="true" timestamp="2008-02-09T16:27:27+00:00">
    <tag k="created_by" v="JOSM"/>
  </node>
  <node id="26600623" lat="53.5582499" lon="9.8610732" user="Johann-Nikolaus Andreae" visible="true" timestamp="2007-09-25T17:33:21+01:00">
    <tag k="name" v="Klein Flottbek"/>
    <tag k="created_by" v="JOSM"/>
    <tag k="railway" v="station"/>
  </node>
  <node id="26600624" lat="53.5578551" lon="9.8577795" user="Johann-Nikolaus Andreae" visible="true" timestamp="2007-09-25T17:33:21+01:00">
    <tag k="created_by" v="JOSM"/>
  </node>
  <node id="26600625" lat="53.5581709" lon="9.8514291" user="Sven S_" visible="true" timestamp="2007-03-18T07:21:54+00:00">
    <tag k="created_by" v="JOSM"/>
  </node>
  <node id="26600626" lat="53.5577874" lon="9.8562906" user="Johann-Nikolaus Andreae" visible="true" timestamp="2007-09-25T17:33:21+01:00">
    <tag k="created_by" v="JOSM"/>
  </node>
  <node id="26600627" lat="53.5588928" lon="9.8479888" user="Sven S_" visible="true" timestamp="2007-03-18T07:21:55+00:00">
    <tag k="created_by" v="JOSM"/>
  </node>
  <node id="26600628" lat="53.559844" lon="9.8449801" user="josias" visible="true" timestamp="2007-12-12T11:00:08+00:00">
    <tag k="created_by" v="JOSM"/>
  </node>
  <node id="26600629" lat="53.5614984" lon="9.841909" user="ThomasT" visible="true" timestamp="2007-11-10T08:32:31+00:00">
    <tag k="name" v="Hochkamp"/>
    <tag k="created_by" v="JOSM"/>
    <tag k="railway" v="station"/>
  </node>
  <node id="26600630" lat="53.5634228" lon="9.8376587" user="josias" visible="true" timestamp="2007-12-12T11:00:08+00:00">
    <tag k="created_by" v="JOSM"/>
  </node>
  <node id="26600631" lat="53.5645494" lon="9.8335045" user="josias" visible="true" timestamp="2007-12-12T11:00:08+00:00">
    <tag k="created_by" v="JOSM"/>
  </node>
  <node id="26600632" lat="53.5650948" lon="9.8298395" user="josias" visible="true" timestamp="2007-12-12T11:00:08+00:00">
    <tag k="created_by" v="JOSM"/>
  </node>
  <node id="27310032" lat="53.5582625" lon="9.8702442" user="Marcos Cramer" visible="true" timestamp="2008-05-04T13:15:24+01:00"/>
  <node id="27310033" lat="53.5582885" lon="9.8717283" user="Sven S_" visible="true" timestamp="2007-04-12T04:43:50+01:00">
    <tag k="created_by" v="JOSM"/>
  </node>
  <node id="27310034" lat="53.5584278" lon="9.8732459" user="Sven S_" visible="true" timestamp="2007-04-12T04:43:50+01:00">
    <tag k="created_by" v="JOSM"/>
  </node>
  <node id="27310035" lat="53.5581911" lon="9.8766848" user="Sven S_" visible="true" timestamp="2007-04-12T04:43:50+01:00">
    <tag k="created_by" v="JOSM"/>
  </node>
  <node id="27310041" lat="53.5603939" lon="9.8870614" user="Sven S_" visible="true" timestamp="2007-04-12T04:43:51+01:00">
    <tag k="created_by" v="JOSM"/>
  </node>
  <node id="29631923" lat="53.5573501" lon="9.8820427" user="Jörn" visible="true" timestamp="2008-01-27T16:20:59+00:00"/>
  <node id="29631924" lat="53.5572859" lon="9.8818493" user="Sven Anders" visible="true" timestamp="2008-03-13T08:17:01+00:00">
    <tag k="created_by" v="JOSM"/>
  </node>
  <node id="29631925" lat="53.5570935" lon="9.8816977" user="Sven Anders" visible="true" timestamp="2008-03-13T08:17:01+00:00">
    <tag k="created_by" v="JOSM"/>
  </node>
  <node id="29631926" lat="53.5568477" lon="9.8816402" user="Sven Anders" visible="true" timestamp="2008-03-13T08:17:01+00:00">
    <tag k="created_by" v="JOSM"/>
  </node>
  <node id="29631927" lat="53.5552916" lon="9.8815162" user="HannesHH" visible="true" timestamp="2008-05-18T20:23:36+01:00">
    <tag k="created_by" v="JOSM"/>
  </node>
  <node id="29631928" lat="53.5544289" lon="9.8813104" user="Sven Anders" visible="true" timestamp="2008-03-13T08:17:01+00:00">
    <tag k="created_by" v="JOSM"/>
  </node>
  <node id="29631929" lat="53.5534799" lon="9.8810754" user="Sven Anders" visible="true" timestamp="2008-03-13T08:17:01+00:00">
    <tag k="created_by" v="JOSM"/>
  </node>
  <node id="29631975" lat="53.5465625" lon="9.880262" user="Jörn" visible="true" timestamp="2008-01-27T16:07:08+00:00">
    <tag k="created_by" v="JOSM"/>
  </node>
  <node id="63314103" lat="53.5583723" lon="9.8504691" user="Gunnar2006" visible="true" timestamp="2007-10-10T17:25:26+01:00">
    <tag k="created_by" v="JOSM"/>
  </node>
  <node id="82460585" lat="53.5657914" lon="9.8782852" user="Jörn" visible="true" timestamp="2008-01-20T12:30:42+00:00"/>
  <node id="82466744" lat="53.562025" lon="9.8787055" user="HannesHH" visible="true" timestamp="2008-08-16T22:06:35+01:00"/>
  <node id="82467066" lat="53.5596666" lon="9.887116" user="mbuege" visible="true" timestamp="2008-07-17T13:57:12+01:00"/>
  <node id="82493921" lat="53.5605941" lon="9.8866482" user="new_agrajag" visible="true" timestamp="2008-08-03T02:23:19+01:00"/>
  <node id="82494095" lat="53.5611513" lon="9.8794806" user="Jörn" visible="true" timestamp="2008-01-29T19:10:05+00:00"/>
  <node id="82494545" lat="53.5678904" lon="9.8787674" user="Jörn" visible="true" timestamp="2008-01-26T14:41:34+00:00"/>
  <node id="88970462" lat="53.559572" lon="9.8781121" user="HannesHH" visible="true" timestamp="2008-06-18T09:18:54+01:00"/>
  <node id="88970720" lat="53.5604023" lon="9.8841508" user="cmatzat" visible="true" timestamp="2008-05-05T15:15:21+01:00"/>
  <node id="88970725" lat="53.5594893" lon="9.884639" user="Jörn" visible="true" timestamp="2008-01-29T19:00:51+00:00"/>
  <node id="105335682" lat="53.5581433" lon="9.877558" user="Jörn" visible="true" timestamp="2008-01-29T19:08:25+00:00"/>
  <node id="105337374" lat="53.5591988" lon="9.8869475" user="ThomasT" visible="true" timestamp="2007-11-10T08:33:53+00:00"/>
  <node id="105345805" lat="53.5652959" lon="9.877643" user="Jörn" visible="true" timestamp="2008-01-26T14:57:40+00:00"/>
  <node id="164106697" lat="53.5648603" lon="9.831745" user="josias" visible="true" timestamp="2007-12-12T11:00:08+00:00"/>
  <node id="164106699" lat="53.5640549" lon="9.8356074" user="josias" visible="true" timestamp="2007-12-12T11:00:08+00:00"/>
  <node id="185479870" lat="53.568881" lon="9.8797017" user="Jörn" visible="true" timestamp="2008-01-15T17:44:30+00:00"/>
  <node id="190168591" lat="53.5530567" lon="9.8810221" user="Jörn" visible="true" timestamp="2008-02-09T16:29:11+00:00">
    <tag k="created_by" v="JOSM"/>
  </node>
  <way id="22376206" visible="true" timestamp="2008-08-18T15:59:53+01:00" user="Sven Anders">
    <nd ref="190069705"/>
    <nd ref="190069711"/>
    <nd ref="190069714"/>
    <nd ref="27310040"/>
    <nd ref="82494095"/>
    <nd ref="82466744"/>
    <nd ref="243487741"/>
    <nd ref="243488763"/>
    <nd ref="243487681"/>
    <nd ref="243487963"/>
    <nd ref="243487843"/>
    <nd ref="105345805"/>
    <nd ref="82460585"/>
    <nd ref="240516073"/>
    <nd ref="240515959"/>
    <nd ref="82494545"/>
    <nd ref="240518469"/>
    <nd ref="185479870"/>
    <tag k="name" v="Groß Flottbeker Straße"/>
    <tag k="postal_code" v="22607"/>
    <tag k="highway" v="residential"/>
    <tag k="created_by" v="Potlatch 0.6c"/>
  </way>
  <way id="24440906" visible="true" timestamp="2008-08-18T16:10:42+01:00" user="Sven Anders">
    <nd ref="29631927"/>
    <nd ref="265634257"/>
    <nd ref="265634258"/>
    <nd ref="265634259"/>
    <tag k="name" v="Grottenstraße"/>
    <tag k="postal_code" v="22605"/>
    <tag k="highway" v="residential"/>
  </way>
  <way id="24440988" visible="true" timestamp="2008-06-18T09:18:57+01:00" user="HannesHH">
    <nd ref="256898155"/>
    <nd ref="256897559"/>
    <nd ref="265634836"/>
    <nd ref="271095938"/>
    <tag k="highway" v="footway"/>
    <tag k="created_by" v="Potlatch 0.8a"/>
    <tag k="foot" v="yes"/>
  </way>
</osm>

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

lxml. html5lib und BS sind HTML-Parser, die Module aus der Standardbibliothek (ElementTree, Minidom, SAX) sind unkomfortabel.

VerirrterMaccer

(Themenstarter)

Anmeldungsdatum:
29. November 2007

Beiträge: 31

Lunar schrieb:

lxml. html5lib und BS sind HTML-Parser, die Module aus der Standardbibliothek (ElementTree, Minidom, SAX) sind unkomfortabel.

Das höre ich sehr gerne. Kannst Du mir eines aus der Standardbibliothek für osm's Daten nahelegen?

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4695

Wohnort: Berlin

Aus der Standardbibliothek würde ich ElementTree empfehlen, was ich auch keineswegs als unkomfortabel bezeichnen würde.

Ferio Team-Icon

Avatar von Ferio

Anmeldungsdatum:
24. April 2007

Beiträge: 383

Marc 'BlackJack' Rintsch schrieb:

Aus der Standardbibliothek würde ich ElementTree empfehlen, was ich auch keineswegs als unkomfortabel bezeichnen würde.

So wie ich das sehe gibt es da aber keine Möglichkeit bequem direkt auf irgendwelche Elemente zuzugreifen. Sowas wie getElementById oder getElementsByTagName ist mir da noch nicht untergekommen.

Und minidom ist was das angeht ja völlig unnütz da man da anscheinend immer noch irgendwelche DTDs angeben muss damit getElementById funktioniert. Dokumentiert ist das aber auch nirgends vernünftig. Habe ich erst durch ausprobieren rausgefunden, dass das nicht so geht wie ich dachte.

Wenn ich da irgendwas übersehen habe, lasse ich mich aber gerne eines besseren belehren.

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4695

Wohnort: Berlin

An Elemente mit bestimmten Tagnamen kommt man mit find() und findall(). Ein Dictionary das IDs auf Knoten abbildet, bekommt man mit XMLID.

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

Marc 'BlackJack' Rintsch schrieb:

Aus der Standardbibliothek würde ich ElementTree empfehlen, was ich auch keineswegs als unkomfortabel bezeichnen würde.

Naja, wenn man lxml gewöhnt ist, vermisst doch manches an der etree-Implementierung der Standardbibliothek. Aber stimmt schon, unkomfortabel ist das nicht ...

Darii schrieb:

Marc 'BlackJack' Rintsch schrieb: Und minidom ist was das angeht ja völlig unnütz da man da anscheinend immer noch irgendwelche DTDs angeben muss damit getElementById funktioniert. Dokumentiert ist das aber auch nirgends vernünftig. Habe ich erst durch ausprobieren rausgefunden, dass das nicht so geht wie ich dachte.

Was streng genommen auch völlig richtig ist. Für XML ist id nur ein Attribut unter anderen, erst eine DTD oder Schema macht es zu einem besonderen Attribut, welches einen Knoten eindeutig identifiziert.

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4695

Wohnort: Berlin

@Lunar: Du legst mir da einen Haufen Worte in den Mund. ☺

VerirrterMaccer

(Themenstarter)

Anmeldungsdatum:
29. November 2007

Beiträge: 31

Danke für die Tipps!

Ferio Team-Icon

Avatar von Ferio

Anmeldungsdatum:
24. April 2007

Beiträge: 383

Lunar schrieb:

Was streng genommen auch völlig richtig ist. Für XML ist id nur ein Attribut unter anderen, erst eine DTD oder Schema macht es zu einem besonderen Attribut, welches einen Knoten eindeutig identifiziert.

Deswegen gibt es da oben ja eigentlich auch so ein <!DOCTYPE... was offenbar ignoriert wird.

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

Marc 'BlackJack' Rintsch schrieb:

@Lunar: Du legst mir da einen Haufen Worte in den Mund. ☺

Scusi 😉

@Darii Von sich aus kann das Modul aber nicht wissen, wo es die zur Deklaration passende DTD oder das entsprechende Schema findet. Folglich musst du es mit angeben, und notwendige Validierung so quasi explizit anstoßen.

Ferio Team-Icon

Avatar von Ferio

Anmeldungsdatum:
24. April 2007

Beiträge: 383

Ja schon klar, ist nur so frustrieren, dass man sich bei Python echt ein Bein ausreißen muss, um HTML-Dateien zu verarbeiten. Das ist es fast schon einfacher, haufenweise reguläre Ausdrücke über die Datei zu jagen.

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4695

Wohnort: Berlin

@Darii: Das kann ich jetzt ehrlich gesagt nicht nachvollziehen. Was ist denn so schwer daran z.B. mit BeautifulSoup Daten aus HTML zu kratzen? Man kommt einfach an beliebige Knoten über Tagnamen, IDs, und sonstige Attribute heran. Wo reisst man sich da bitteschön ein Bein aus!?

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

Ack. Gerade in Python kann man mit lxml.html, html5lib oder BeautifulSoup so einfach scrapen wie in kaum einer anderen Sprache. Ich würde mal gerne wissen, für welche andere Sprache du da komfortablere Lösungen gefunden hast. Natürlich, wenn man mit Minidom scrapt, sieht das anders aus, aber dann ist man auch einfach selbst schuld.

Ferio Team-Icon

Avatar von Ferio

Anmeldungsdatum:
24. April 2007

Beiträge: 383

Lunar schrieb:

Ack. Gerade in Python kann man mit lxml.html, html5lib oder BeautifulSoup so einfach scrapen wie in kaum einer anderen Sprache.

Gut Beautiful sieht wirklich wie eine Lösung hatte irgendwie beim ersten mal drübersehen nicht das gefunden was ich suchte. Für lxml braucht man einen eigenen Server auf dem man das dann auch installieren kann. Ist auch egal ich hab mir jetzt die Funktionen die ich aus lxml vermisse für xml.etree neu geschrieben.

Antworten |