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

Mittwoch 21. Mai 2008, 10:17

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

Mittwoch 21. Mai 2008, 10:45

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
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 21. Mai 2008, 11:04

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 Modvoice
BlackJack

Mittwoch 21. Mai 2008, 11:11

@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

Mittwoch 21. Mai 2008, 11:13

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

Mittwoch 21. Mai 2008, 11:45

@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

Mittwoch 21. Mai 2008, 11:56

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

Donnerstag 22. Mai 2008, 10:31

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

Freitag 23. Mai 2008, 14:27

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