14

我只想获得选择的选定选项。例如:

<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 和 Beautiful Soup 4.1.2

4

2 回答 2

15

作为属性值传递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>]
于 2013-02-13T21:30:48.900 回答
1

您可以使用

theSelectTag.select_one('option:checked')

它将返回您唯一选择的选项。

于 2021-03-12T10:10:23.300 回答