Python 使用BeautifulSoup查找所选选项

Python 使用BeautifulSoup查找所选选项,python,beautifulsoup,Python,Beautifulsoup,我只想得到一个select的selected选项。例如: <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> <opti

我只想得到一个select的selected选项。例如:

<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>
但这是返回所有选项。有没有办法获取属性存在的所有元素?请注意,我要求全部,因为我正在抓取的站点确实包含多个选项的选定属性


我正在使用Python 2.7和Beautiful Soup 4.1.2传递
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>]
>>来自bs4导入组
>>>汤=美汤(“”)
...   2002/12
...   2003/12
...   2004/12
...   2005/12
...   2006/12
...   2007/12
... ''')
>>>soup.find_all('option',selected=True)
[2007/12]
>>>soup.find_all('option',{'selected':True})
[2007/12]
对于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>]
来自lxml导入etree的
>>
>>>root=etree.HTML(“”)
2002/12
2003/12
2004/12
2005/12
2006/12
2007/12
''')
>>>xpath(“//选项[@selected]”)
[]
您可以使用

theSelectTag.select_one('option:checked')

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

是否有任何原因导致此选项无法在我的系统上运行?如果我尝试你选择的任何一个参数,就会得到一个空集。我确认,如果我排除他们,我会得到整套。我正在使用Python2.7和BeautifulSoup4.1。2@EricG:真奇怪。你试过安装
lxml
html5lib
吗?我没有。它主要起作用,我可以很容易地解决这个问题。我只是认为这在BeautifulSoup中应该是可行的。除非你安装了lxml或html5lib,否则这是行不通的。BeautifulSoup在使用内置解析器之前会优先选择这些解析器。它对这些解析器起作用的原因是,它们用空字符串填充未指定的属性值-请参见上文Blender的示例,其中find_all响应将选定属性设置为“selected=”“”,而不是输入HTML中的“selected”。对于内置解析器,属性值保留为None,这将从匹配()中排除。
theSelectTag.select_one('option:checked')