【问题标题】:BeautifulSoup 4 parsing attribute errorBeautifulSoup 4 解析属性错误
【发布时间】:2012-12-14 10:28:19
【问题描述】:

我正在尝试解析 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! 谢谢。

【问题讨论】:

  • 在这种情况下您要解析或访问什么?

标签: python beautifulsoup


【解决方案1】:

我不完全确定您在这里尝试使用 Beautiful Soup 访问什么,但如果您想获取选择或选项的属性,您可以执行以下操作:

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

如果这没有帮助,也许您可​​以举一个您期望的输出示例

【讨论】:

    猜你喜欢
    • 2016-09-02
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 2023-03-16
    • 2015-09-08
    相关资源
    最近更新 更多