xml,soup beautiful parser,jede titel allein behandeln

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
dareal
User
Beiträge: 5
Registriert: Mittwoch 14. Mai 2008, 13:52

hallo zusammen,

ich versuche die titel innerhalb ein xml datei zu extrahieren und in einem DB zu speichern.

ich benutze soup Beautiful als Parser.

mein Problem ist : ich kann nur den ersten titel im ersten item zu parsen ,weitere item könnte ich nicht dadrauf zu greifen,da ich Python anfänger bin ich habe kein konkrete lösung dafür,das heisst mein program soll in die nächste item springen ,den titel parsen und in die nächste position speichern.

bis jetzt habe ich das geschfft:

Code: Alles auswählen

source="seite.xml"
page = urllib.urlopen(source)
soup = BeautifulSoup(page)
item=soup.rss.item

for d in item.findAll('title'):
  print d.string              #hier wird den ersten titel innerhalb den ersten        
                                  #item gelesen
  
wie kann ich den ersten d.string (also hier mein titel) in eine dict[0] speichern? und wie gehts weiter mit dem zweiten item??

ich hab wirklich keine ahnung wie das weiter geht
HILFE
danke im Voraus
dareal
User
Beiträge: 5
Registriert: Mittwoch 14. Mai 2008, 13:52

ok ich hab jetzt geschaft den ersten titel in einem array zu speichern,aber bleibt immer das problem mir dem nächsten <item> Sprung und den titel wieder zu holen

Code: Alles auswählen


s={}
i=0
for d in item.findAll('titel'):
  s[i]= d.string
  i = i + 1
  print s.values()        #ergebniss ->[heute im Nachricht]
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hallo dareal, willkommen im Forum,

Magst du ins auf paste.pocoo.org so eine XML-Datei hinterlegen? Es ist in der Regel besser as passene Tool für die Aufgabe zu nutzen, im Falle von XML-Parsen wäre das wohl ElementTree.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

@dareal: Das was Du da "array" nennst ist ein Dictionary und vielleicht nicht die geeignetste Datenstruktur, wenn Du fortlaufende Schlüssel von 0 aufwärts verwendest. Lass das `i` weg und benutze eine Liste wo Du die Daten anhängst.

Wieviele Titel gibt es denn pro Item? Wenn das nur einer ist, dann ist die ``for``-Schleife mit dem `findAll()` unsinnig weil die dann ja grundsätzlich nur einmal durchlaufen wird.

Mach lieber eine Schleife über die Items und hole dort dann den Titel per Direktzugriff heraus. Ungetestet:

Code: Alles auswählen

source = 'seite.xml'
page = urllib.urlopen(source)
soup = BeautifulSoup(page)

titles = list()
for item in soup.rss.findAll('item'):
    titles.append(item.title.string)
Zu Leonidas Vorschlag würde ich noch `lxml.etree` ergänzen, da kann man XPath-Ausdrücke verwenden.
dareal
User
Beiträge: 5
Registriert: Mittwoch 14. Mai 2008, 13:52

ok hier hab ich das link :
http://paste.pocoo.org/show/52189/

und noch etwas z.b: köln siht in meine array ganz komisch ->[u'K\xf6ln']

wie kann ich das vermeiden,ich will nur [köln] ??ist das wegen .values() ??

danke
dareal
User
Beiträge: 5
Registriert: Mittwoch 14. Mai 2008, 13:52

@BlackJack : danke deine Lösung hat mir geholfen,ich habe bis jetzt alle title raus geholt,und im Dictionnary gespeichert :)
sorry für die Array :ich komme aus der c++ welt :)

aber ich hab immer das problem mit umlaut z.B Köln ->[u'K\xf6ln']
BlackJack

Wegen Köln -- Das hier lesen und verstehen: [wiki]Von Umlauten, Unicode und Encodings[/wiki]
dareal
User
Beiträge: 5
Registriert: Mittwoch 14. Mai 2008, 13:52

okay hat super gelaufen
danke
mpathy
User
Beiträge: 48
Registriert: Montag 17. September 2007, 12:29

Ansonsten nimm BeautifulStoneSoup nicht BeautifulSoup, das ist besser für deine Zwecke.
Antworten