2013-02-13 54 views
6

我只想得到select的選定選項。例如:使用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> 

我知道我可以做

theSelectTag.findAll('option',attrs={'selected':''}) 

但就是返回的所有選項。有沒有辦法讓一個屬性存在的所有元素?請注意,我要求所有人,因爲我正在抓取的網站確實包含多個選項的選定屬性。

我使用Python 2.7和美麗的湯4.1.2

回答

7

傳遞True爲屬性的值將匹配該屬性的所有元素:

>>> 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>''') 
>>> soup.find_all('option', selected=True) 
    [<option selected="" value="5">2007/12</option>] 
>>> soup.find_all('option', {'selected': True}) 
    [<option selected="" value="5">2007/12</option>] 

而且隨着LXML:

>>> from lxml import etree 
>>> root = etree.HTML('''<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>''') 
>>> root.xpath('//option[@selected]') 
    [<Element option at 0x228b7d0>] 
+0

這有沒有什麼理由不適合我的系統?如果我嘗試選擇任何一個參數,我會得到一個空集。我確認,如果我排除他們,我會得到整套。我使用Python 2.7和美麗的湯4.1.2 – 2013-02-13 21:41:30

+0

@EricG:這很奇怪。你有沒有嘗試安裝'lxml'和'html5lib'? – Blender 2013-02-13 22:35:05

+0

我沒有。這主要是工作,我可以很容易地解決這個問題。只是認爲這應該已經與BeautifulSoup可行。 – 2013-02-14 00:42:28