BeautifulSoup:TypeError:'NoneType'对象不可订阅

时间:2014-11-25 14:45:26

标签: python html beautifulsoup html-parsing

我需要从链接( 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

有任何线索吗? 提前致谢

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

2 个答案:

答案 0 :(得分:5)

我的猜测是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_

答案 1 :(得分:0)

因为在<class 'bs4.element.Tag'>中没有“ 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'! ")

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

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