PythonライブラリのBeautiful Soupでセレクトボックスのselecedなオプション取得する方法を教えてください。

回答の条件
  • 1人1回まで
  • 登録:2009/12/20 18:43:41
  • 終了:2009/12/21 02:01:56

ベストアンサー

id:kn1967 No.1

kn1967回答回数2915ベストアンサー獲得回数3012009/12/20 22:59:15

ポイント60pt

一例

from BeautifulSoup import BeautifulSoup
#
doc = """
<html><head><title>BeautifulSoup</title></head><body>
<select name="s1" size="5" multiple>
<option value="101">a</option>
<option value="102" selected>b</option>
<option value="103">c</option>
<option value="104" selected>d</option>
<option value="105">e</option>
</select>
<select name="s2">
<option value="201">aa</option>
<option value="202" selected>bb</option>
</select>
</body></html>"""
#
soup = BeautifulSoup(doc)
for sel in soup.findAll('select'):
    print sel['name']
    for opt in sel.findAll('option', selected="selected"):
        print opt['value'], opt.renderContents()

結果出力

s1
102 b
104 d
s2
202 bb

※ selected="selected" がポイント

id:dasako

これはすでに試しました。

結果出力のようにはなりません。

私の環境はPython2.6+BeautifulSoup 3.1です。

>その申されぶりからは、私の書いたコードそのままではなく、

>ご自身で作られた物での事だと思われますが、違いますか?

PythonShellにてご提示いただいたコードそのまま試しています。

selected="selected"を書いたままだと何もprintされず

selected="selected"を削除するとoptionが全部printされますので

エラーになっているわけではありません。

※追記

kn1967の言われるとおりBeautifulSoupを3.0.7aに落としたら

selected取れるようになりました!

BeautifulSoup3.1系はまだやめたほうがいいということですね。

ちなみにBeautifulSoup3.1系はcheckboxのcheckedも取れません。

2009/12/21 02:00:26
  • id:kn1967
    ひさびさに Python の環境を構築してみた。
    待ってみても Python 使いの人からの回答が無いようならどうぞ。
  • id:kn1967
    こちらが動作テストした環境は下記になります。
    PythonD 2.4.2 + BeautifulSoup 3.0.7a

    >これはすでに試しました。
    >結果出力のようにはなりません。

    その申されぶりからは、私の書いたコードそのままではなく、
    ご自身で作られた物での事だと思われますが、違いますか?
    私の書いたコードそのままでも動かなかったのでしょうか?
    私の書いたコードでまだお試しでないなら、お試しの上、
    動かなければ、動かないとおっしゃってください。

    いずれにしても、単に「なりません」だけでは先に進めません。
    双方の違いを無くしていかないことには、目的には近づきませんので、
    そちらの環境や、読み込んでいるHTMLの一部、エラーメッセージなど、
    必要事項を提示なさることを薦めます。
  • id:kn1967
    こちら、現在 3.1 への入れ替えで不具合発生。
    とりあえず 3.0.7 に戻して復活。

    >selected="selected"を書いたままだと何もprintされず
    >selected="selected"を削除するとoptionが全部printされます

    現状でこちらで推測できるのは
    print sel['name'] ではなく
    print sel として selected が selected="selected" になっているかを
    確認していただくくらいです。
  • id:dasako
    >こちら、現在 3.1 への入れ替えで不具合発生。
    >とりあえず 3.0.7 に戻して復活。

    どうやら3.1が問題のようでした。
    ありがとうございました。
  • id:kn1967
    3.1.0がおかしいので、調べてみるとトップページ
    http://www.crummy.com/software/BeautifulSoup/
    の一番上から下記にリンクがあり、
    http://www.crummy.com/software/BeautifulSoup/3.1-problems.html
    3.1.0は3.0.7/3.0.8とは毛色が違うもののようで、
    申し訳ありませんが、現時点の私には手がでそうにありません。

    だから、何だと言われればそれまでなのですが、
    シリーズ最新バージョンの3.0.8にすることは無理でしょうか?
    http://www.crummy.com/software/BeautifulSoup/download/3.x/
    3.1.0 29-Dec-2008
    3.0.8 01-Dec-2009 こちらのほうが一番新しい。テストコードも動きました。
  • id:kn1967
    私のコメントのほうが少し遅かったようですが、
    何はともあれ、動くようになって、ホッとしています。

    では、これにて失礼。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません