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 に答える