首页 文章

BeautifulSoup 4解析属性错误

提问于
浏览
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 一个touple对象,因为此代码从bs3移植到bs4!谢谢 .

1 回答

  • 1

    我不完全确定你在这里想要使用Beautiful Soup访问什么,但是如果你想获得select或选项的属性,你可以做类似的事情:

    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']
    

    如果这没有帮助,也许您可以举例说明您期望的输出

相关问题