2016-08-22 1 views
1

Ich habe meine Foursquare-Daten heruntergeladen und sie kommt im KML-Format. Ich analysiere es als eine XML-Datei mit Python und kann nicht herausfinden, wie man den Text zwischen dem geschlossenen a-Tag und dem geschlossenen description-Tag erhält. (Es ist der Text, den ich beim Einchecken eingegeben habe, im Beispiel unten heißt es "ENDLICH HIER !! Mit Sonya und Co.", aber es gibt auch einen Bindestrich).Erhalte Text zwischen zwei geschlossenen Tags XML - Python

Dies ist ein Beispiel dafür, wie die Daten aussehen.

<Placemark> 
    <name>hummus grill</name> 
    <description>@<a href="https://foursquare.com/v/hummus-grill/4aab4f71f964a520625920e3">hummus grill</a>- FINALLY HERE!! With Sonya and co</description> 
    <updated>Tue, 24 Jan 12 17:14:00 +0000</updated> 
    <published>Tue, 24 Jan 12 17:14:00 +0000</published> 
    <visibility>1</visibility> 
    <Point> 
    <extrude>1</extrude> 
    <altitudeMode>relativeToGround</altitudeMode> 
    <coordinates>-75.20104383595685,39.9528387056977</coordinates> 
    </Point> 
</Placemark> 

Bisher habe ich in der Lage gewesen, die lat/Long-Positionen zu erhalten, veröffentlicht Daten, Name und Link mit dem Code so etwas für alle:

latitudes = [] 
longitudes = [] 

for d in dom.getElementsByTagName('coordinates'): 
    #Break them up into latitude and longitude 
    coords = d.firstChild.data.split(',') 
    longitudes.append(float(coords[0])) 
    latitudes.append(float(coords[1])) 

ich schon versucht, diese (unter der ist Beginn der Daten diese Header Sache ist, hat nicht herausgefunden, wie es noch zu handhaben)

for d in dom.getElementsByTagName('description'): 
    description.append(d.firstChild.data.encode('utf-8')) 

<?xml version="1.0" encoding="UTF-8"?> 
<kml><Folder><name>foursquare checkin history </name><description>foursquare checkin history </description>: 

und dann von diesem d.firstChild.nextSibling.firstChild.data.encode Zugriff (‚utf-8‘), aber es gibt mir nur "Hummus Grill", was ich bin als Text zwischen den a-Tags (anstelle des Namens-Tags).

Antwort

0

Die folgenden Werke für mich:

In [44]: description = [] 

In [45]: for d in dom.getElementsByTagName('description'): 
    ....:  description.append(d.firstChild.nextSibling.nextSibling.data.encode('utf-8')) 
    ....:  

In [46]: description 
Out[46]: ['- FINALLY HERE!! With Sonya and co'] 

Oder, wenn Sie den gesamten Text in der Beschreibung Tag wollen:

from xml.dom.minidom import parse, parseString 

def getText(node, recursive = False): 
    """ 
    Get all the text associated with this node. 
    With recursive == True, all text from child nodes is retrieved 
    """ 
    L = [''] 
    for n in node.childNodes: 
     if n.nodeType in (dom.TEXT_NODE, dom.CDATA_SECTION_NODE): 
      L.append(n.data) 
     else: 
      if not recursive: 
       return None 
     L.append(getText(n)) 
    return ''.join(L) 

dom = parseString("""<Placemark> 
    <name>hummus grill</name> 
    <description>@<a href="https://foursquare.com/v/hummus-grill/4aab4f71f964a520625920e3">hummus grill</a>- FINALLY HERE!! With Sonya and co</description> 
    <updated>Tue, 24 Jan 12 17:14:00 +0000</updated> 
    <published>Tue, 24 Jan 12 17:14:00 +0000</published> 
    <visibility>1</visibility> 
    <Point> 
    <extrude>1</extrude> 
    <altitudeMode>relativeToGround</altitudeMode> 
    <coordinates>-75.20104383595685,39.9528387056977</coordinates> 
    </Point> 
</Placemark>""") 

description = [] 

for d in dom.getElementsByTagName('description'): 
    description.append(getText(d, recursive = True)) 

print description 

Dieser Druck wird: [u'@hummus grill- FINALLY HERE!! With Sonya and co']

0

Haben Sie versucht, Sub-Strings zu verwenden?

Nehmen wir an, dass alle Ihre xml in der Variablen "foo" zum Beispiel ist.

foo = '<description>@<a href="https://foursquare.com/v/hummus-grill/4aab4f71f964a520625920e3">hummus grill</a>- FINALLY HERE!! With Sonya and co</description>' 

Sie können diese Daten extrahieren, indem Sie Folgendes drucken.

foo[foo.index('</a>')+4:foo.index('</description>')] 

Dies sollte Ihnen geben, was Sie wollen.

- FINALLY HERE!! With Sonya and co 

Lesen Sie nur auf Teilstrings und Sie werden in der Lage sein, den Text einfacher zu manipulieren.

+0

so würde ich muss das DOM-Element in einen Teilstring konvertieren? Oder schlagen Sie eine andere Route vor? – user3768258

+0

Yup. Wenn Sie das gesamte DOM-Element zu einer Variable machen, können Sie bestimmte Teile leichter auseinander nehmen. Teilstrings neigen dazu, eine einfache Methode zum Parsen von Text zu sein. –

Verwandte Themen