BeautifulSoup报”AttributeError: ‘NoneType’ object has no attribute ‘get_text’ “异常的原因以及解决办法

  • Post category:Python

“AttributeError: ‘NoneType’ object has no attribute ‘get_text’ “这个错误通常出现在使用BeautifulSoup进行解析时,当BeautifulSoup对象找不到要查找的标签或属性时会返回None,而在使用get_text()这个函数时就会报错。

这个错误通常有以下几个原因:

1.输入的HTML文本格式不规范,导致BeautifulSoup解析出错。

2.要查找的标签或属性不存在。

3.使用了多重嵌套的标签结构,导致程序无法正确识别要查找的标签。

解决的办法是:

1.检查HTML文本的格式是否正确,可以通过在线HTML格式化工具自动帮助你检查和修复格式。

2.在使用BeautifulSoup对象查找标签或属性时,可以先使用find()函数检查是否存在该标签或属性,如果返回的结果为None,则说明该标签或属性不存在。

3.对于多重嵌套的标签结构,可以使用CSS选择器或者正则表达式进行定位,或者先遍历父标签,再遍历子标签,逐层进行查找。

以下是一个使用BeautifulSoup解析HTML文本时经常出现的错误抛出方式:

from bs4 import BeautifulSoup

html_doc = """
<html>
<head>
<title>测试页面</title>
</head>
<body>
<p><a href="https://www.xxx.com">链接1</a></p>
<p><a>链接2</a></p>
</body>
</html>
"""

soup = BeautifulSoup(html_doc, 'html.parser')
links = soup.find_all('a')

for link in links:
    print(link.get_text())

在这个例子中,当BeautifulSoup找不到包含文本内容的a标签时,会返回一个None值,而当我们使用link.get_text()时就会报错,抛出”AttributeError: ‘NoneType’ object has no attribute ‘get_text'”这个错误。我们可以通过添加一条判断来解决这个问题,即当link不为None时再执行link.get_text()操作,代码如下:

from bs4 import BeautifulSoup

html_doc = """
<html>
<head>
<title>测试页面</title>
</head>
<body>
<p><a href="https://www.xxx.com">链接1</a></p>
<p><a>链接2</a></p>
</body>
</html>
"""

soup = BeautifulSoup(html_doc, 'html.parser')
links = soup.find_all('a')

for link in links:
    if link is not None:
        print(link.get_text())