Seite 1 von 1

bs4: Informationen extrahieren

Verfasst: Donnerstag 18. Juli 2013, 22:00
von BastiL
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.

Re: bs4: Informationen extrahieren

Verfasst: Donnerstag 18. Juli 2013, 22:40
von Sirius3
@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.

Re: bs4: Informationen extrahieren

Verfasst: Donnerstag 18. Juli 2013, 22:46
von Dami123
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', ''))

Re: bs4: Informationen extrahieren

Verfasst: Donnerstag 18. Juli 2013, 22:55
von 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. ;-)