1

HTMLドキュメントを解析しようとしていますが、bs4が特定のタグの属性を解析できません。

<select class="inputNormal" id="TipoImmobileDaNonImportare" name="TipoImmobileDaNonImportare" style="width:100%">
            <option value=""></option>
            <option value="unità immobiliare urbana">unità immobiliare urbana</option>            
            <option value="particella terreni">particella terreni</option>
</select>

印刷すると、エラーが発生します

AttributeError: 'tuple' object has no attribute 'items'`
the tag and attribute i print:`select: (u'style', u'class', u'name')`
instead of (for example):  `input: {u'type': u'hidden', u'name': u'Immobile_Note', u'value': u'Ubicazione occupazione', u'id': u'Immobile_Note'}`

更新:soup.find_all( attrs= {'id' : 'somevalue' } )ツリーのすべての属性にアクセスしようとすると失敗します!

私が試してみると:

s = BeautifulSoup( """<select class="inputNormal" id="TipoImmobileDaNonImportare" name="TipoImmobileDaNonImportare" style="width:100%">
<option value=""></option>
<option value="unità immobiliare urbana">unità immobiliare urbana</option>
<option value="particella terreni">particella terreni</option>
</select>""")

パーサーはそれを正しく検出します。

select: {'id': 'TipoImmobileDaNonImportare', 'style': 'width:100%', 'class': ['inputNormal'], 'name': 'TipoImmobileDaNonImportare'}

lxmlパーサーとhtml5libパーサーで解析しようとしましたが、結果は同じです。

返信ありがとうございます。

編集:Amandaに感謝しますが、私のコードにエラーがありましたtag.attrs。このコードはbs3からbs4に移植されているため、toupleオブジェクトに格納しようとしています。ありがとう。

4

1 に答える 1

1

ここでBeautifulSoupを使用して何にアクセスしようとしているのか完全にはわかりませんが、selectまたはoptionsの属性を取得したい場合は、次のようにすることができます。

html = """<select class="inputNormal" id="TipoImmobileDaNonImportare" name="TipoImmobileDaNonImportare" style="width:100%">
        <option value=""></option>
        <option value="unità immobiliare urbana">unità immobiliare urbana</option>
        <option value="particella terreni">particella terreni</option></select>"""

soup = BeautifulSoup(html)

最初の「選択」の属性を次のように表示できます。

print soup.find('select').attrs

または、すべてのオプションの属性を次のように表示します。

for option in soup.find_all('option'):
    print option.attrs

または、利用可能なアイテムの名前を探している場合は、次を使用します。

for option in soup.find_all('option'):
    print option.text

または、表示されたテキストではなくオプション値が必要な場合は、次を使用します。

for option in soup.find_all('option'):
    print option['value']

それでも問題が解決しない場合は、期待する出力の例を挙げてください。

于 2012-12-14T19:16:19.367 に答える