Reputation: 191
<select>
<option value="0">2002/12</option>
<option value="1">2003/12</option>
<option value="2">2004/12</option>
<option value="3">2005/12</option>
<option value="4">2006/12</option>
<option value="5" selected>2007/12</option>
</select>
with this code, I need value as '0'
not text as '2002/12'
I tried a lot of BS4 options, .stripped_strings
, .strip()
, .contents
, get()
, etc.
How I can get values not text?
Upvotes: 14
Views: 26190
Reputation: 442
Like this:
>>> import BeautifulSoup
>>> doc = """
... <select>
... <option value="0">2002/12</option>
... <option value="1">2003/12</option>
... <option value="2">2004/12</option>
... <option value="3">2005/12</option>
... <option value="4">2006/12</option>
... <option value="5" selected>2007/12</option>
... </select>
... """
>>> soup = BeautifulSoup.BeautifulSoup(doc)
>>> list = soup.findAll('option')
>>> for l in list:
... print l['value']
...
0
1
2
3
4
5
>>>
Upvotes: 6
Reputation: 1123830
You want the value
attribute; access tag attributes using mapping syntax:
option['value']
Demo:
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('''\
... <select>
... <option value="0">2002/12</option>
... <option value="1">2003/12</option>
... <option value="2">2004/12</option>
... <option value="3">2005/12</option>
... <option value="4">2006/12</option>
... <option value="5" selected>2007/12</option>
... </select>
... ''')
>>> for option in soup.find_all('option'):
... print 'value: {}, text: {}'.format(option['value'], option.text)
...
value: 0, text: 2002/12
value: 1, text: 2003/12
value: 2, text: 2004/12
value: 3, text: 2005/12
value: 4, text: 2006/12
value: 5, text: 2007/12
Upvotes: 28