【问题标题】:BeautifulSoup: TypeError: 'NoneType' object is not subscriptableBeautifulSoup:TypeError:“NoneType”对象不可下标
【发布时间】:2015-01-23 15:09:10
【问题描述】:

我需要从链接 (a) 标记中获取 "href" 属性。

我跑

 label_tag = row.find(class_='Label')
 print(label_tag)

我明白了(抱歉,出于隐私原因,我无法显示链接和文字)

<a class="Label" href="_link_">_text_</a>

类型

<class 'bs4.element.Tag'>

但是当我跑步时(如BeautifulSoup getting href所示)

tag_link = label_tag['href']
print(tag_link)

我猜是以下错误(在第一个命令上)

TypeError: 'NoneType' object is not subscriptable

有什么线索吗? 提前致谢

[已解决] 编辑:我犯了一个错误(循环遍历具有异构结构的元素)

【问题讨论】:

  • 您能展示一下您目前拥有的完整代码吗?谢谢。

标签: python html beautifulsoup html-parsing


【解决方案1】:

因为&lt;class 'bs4.element.Tag'&gt;中没有“Label”类,所以label_tag['href']返回None,就会出错。

您可以使用以下代码来处理此异常:

if tag_link = label_tag.get('href'):
    print(tag_link)
else:
    print("there is no class of 'Label' or no attribute of 'href'! ")

此方法可用于处理异常以防止程序崩溃。

如果你的页面元素是固定的,前一个答案是可行的。

【讨论】:

    【解决方案2】:

    我的猜测是 label_tag 实际上并没有返回您正在寻找的汤的部分。这个最小的例子有效:

    import bs4
    text = '''<a class="Label" href="_link_">_text_</a>'''
    soup = bs4.BeautifulSoup(text)
    link = soup.find("a",{"class":"Label"})
    print (link["href"])
    

    输出:

    _link_
    

    【讨论】:

    • 你是绝对正确的。我犯了一个错误(循环遍历具有异构结构的元素)。现在它可以工作了。还是谢谢
    猜你喜欢
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2022-01-12
    • 2012-01-13
    相关资源
    最近更新 更多