bs4: Informationen extrahieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
BastiL
User
Beiträge: 135
Registriert: Montag 7. Juli 2008, 20:22

Hallo zusammen,

ich versuche Infos mit BS4 zu bekommen:

Code: Alles auswählen

import bs4

soup=bs4.BeautifulSoup('<select class="std exchange {formSubmit:{}}" id="marketSelect" name="ID_NOTATION"><option selected="selected" value="1">Option1\n</option><option value="2">Option2\n</option><option value="3">Option3\n</option></select>')

for i in soup:
    print i.get_text(), i.option['value']
Ich erwarte etwas in der Form:
Option1 1
Option2 2
Option3 3
als Ausgabe, aber ich bekomme:
Option1
Option2
Option3
1
Irgendetwas mache ich da mit der Ausgabe von value wohl falsch?

Danke.
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@BastiL: Du bekommst das, was Du verlangst: für jedes Top-Level-Element wird der Gesamte Text ("Option1\nOption2\nOption3\n") und das Attribut 'value' des ersten <option>-Tags unterhalb des Top-Level-Elements ausgegeben.

PS: Bei einer for-Schleife erwartet der geneigte Programmierer, dass »i« eine Zahl enthält. Er wird bei Dir enttäuscht.
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

Schau dir mal die Dokumentation an http://www.crummy.com/software/BeautifulSoup/bs4/doc/

Code: Alles auswählen

from bs4 import BeautifulSoup

text = '<select class="std exchange {formSubmit:{}}" id="marketSelect" name="ID_NOTATION"><option selected="selected" value="1">Option1\n</option><option value="2">Option2\n</option><option value="3">Option3\n</option></select>'


    
for i in BeautifulSoup(text).findAll("option"):
            print "%s %s" % (i.get_text().strip(), i.get('value', ''))
BlackJack

@BastiL: Die Schleife wird genau *einmal* durchlaufen und `i` wird dabei an das <html>-Objekt gebunden. Du solltest vielleicht die Schleife über die <option>-Objekte machen. ;-)
Antworten