PyCharm報(bào)錯(cuò)AttributeError: ‘NoneType‘ object has no attribute ‘find_all‘問(wèn)題的原因分析及解決方案
一、摘要
在使用 BeautifulSoup 解析網(wǎng)頁(yè)時(shí),AttributeError: 'NoneType' object has no attribute 'find_all' 是一個(gè)十分常見(jiàn)卻又讓人頭疼的錯(cuò)誤。本篇博客將從開發(fā)場(chǎng)景與技術(shù)細(xì)節(jié)出發(fā),全面剖析該異常的多種成因,并給出從入門到進(jìn)階的 15+ 種解決方案,幫助你徹底搞定 find_all 相關(guān)的 NoneType 問(wèn)題。
二、開發(fā)環(huán)境
- 操作系統(tǒng):macOS
- Python 版本:3.10.x / 3.11.x
- IDE:PyCharm 2025
- 解析庫(kù):beautifulsoup4 >= 4.11.1
- HTTP 請(qǐng)求:requests >= 2.28.1
三、異常場(chǎng)景及技術(shù)細(xì)節(jié)
在執(zhí)行如下代碼時(shí):
from bs4 import BeautifulSoup
import requests
resp = requests.get("https://example.com")
soup = BeautifulSoup(resp.text, "html.parser")
items = soup.find("div", class_="item-list").find_all("li")
如果頁(yè)面結(jié)構(gòu)與預(yù)期不符(例如 .item-list 不存在),soup.find(...) 返回 None,隨之調(diào)用 .find_all 時(shí)就會(huì)拋出:
AttributeError: 'NoneType' object has no attribute 'find_all'
技術(shù)上,該異常表明對(duì) None(空值)進(jìn)行了成員方法調(diào)用。根本原因即上一層查找未命中或返回了錯(cuò)誤類型。
四、核心排查思路與解決方案
4.1 檢查選擇器是否正確
CSS 語(yǔ)法、類名大小寫:確認(rèn) HTML 結(jié)構(gòu)與選擇器一致
示例:
tag = soup.select_one("div.item-list")
if not tag:
raise ValueError("頁(yè)面未包含 .item-list 節(jié)點(diǎn)")
items = tag.find_all("li")
4.2 網(wǎng)絡(luò)請(qǐng)求與響應(yīng)狀態(tài)
有時(shí)請(qǐng)求被重定向、攔截或返回 404,導(dǎo)致 resp.text 中無(wú)預(yù)期內(nèi)容。
if resp.status_code != 200:
print(f"請(qǐng)求失敗:HTTP {resp.status_code}")
resp.raise_for_status()
4.3 不同解析器差異
html.parser vs lxml vs html5lib
更換解析器重試:
BeautifulSoup(resp.text, "lxml")
4.4 加強(qiáng) None 檢查與容錯(cuò)
container = soup.find("div", id="main-container")
if container is None:
# 打印日志或拋出自定義異常
print("未找到 #main-container,檢查頁(yè)面結(jié)構(gòu)")
else:
elements = container.find_all("p")
五、進(jìn)階排查流程


六、常見(jiàn)場(chǎng)景與對(duì)策總結(jié)
| 場(chǎng)景 | 原因與對(duì)策 |
|---|---|
| 找不到標(biāo)簽 | ① 選擇器不對(duì) ② 頁(yè)面腳本動(dòng)態(tài)渲染,用 Selenium 或 API |
| None 直接鏈?zhǔn)秸{(diào)用 | 加入 if tag is None 檢查 |
| 請(qǐng)求被攔截或返回 404/302 | 檢查 resp.status_code,設(shè)置合適的 headers |
| 使用默認(rèn)解析器解析失敗 | 換用 lxml 或 html5lib |
| 頁(yè)面內(nèi)容通過(guò) JavaScript 動(dòng)態(tài)加載 | 使用 Selenium、Playwright 或抓包 API |
| 目標(biāo)節(jié)點(diǎn)深度嵌套,忘記逐級(jí)查找 | 分步打印中間結(jié)果,定位哪一級(jí)返回 None |
七、小貼士
“最好的解析器不是代碼,而是對(duì)頁(yè)面結(jié)構(gòu)的深入理解。”
遇到類似問(wèn)題時(shí),先不要驚慌,按以上思路逐層排查,往往能在 5 分鐘內(nèi)搞定。
以上就是PyCharm報(bào)錯(cuò)AttributeError: ‘NoneType‘ object has no attribute ‘find_all‘問(wèn)題的原因分析及解決方案的詳細(xì)內(nèi)容,更多關(guān)于PyCharm AttributeError NoneType的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- pandas報(bào)錯(cuò)AttributeError: DataFrame object has no attribute ix問(wèn)題
- 解決python報(bào)錯(cuò):AttributeError:?'ImageDraw'?object?has?no?attribute?'textbbox'
- Python 中 AttributeError: ‘NoneType‘ object has no attribute ‘X‘ 錯(cuò)誤問(wèn)題解決方案
- 一步真實(shí)解決AttributeError:‘Upsample‘?object?has?no?attribute‘recompute_scale_factor‘的問(wèn)題
- Python進(jìn)程崩潰AttributeError異常問(wèn)題解決
相關(guān)文章
python自動(dòng)化UI工具發(fā)送QQ消息的實(shí)例
今天小編就為大家分享一篇python自動(dòng)化UI工具發(fā)送QQ消息的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
numpy 進(jìn)行數(shù)組拼接,分別在行和列上合并的實(shí)例
今天小編就為大家分享一篇numpy 進(jìn)行數(shù)組拼接,分別在行和列上合并的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
通過(guò)python實(shí)現(xiàn)隨機(jī)交換禮物程序詳解
這篇文章主要介紹了通過(guò)python實(shí)現(xiàn)隨機(jī)交換禮物程序詳解的,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
pandas進(jìn)行時(shí)間數(shù)據(jù)的轉(zhuǎn)換和計(jì)算時(shí)間差并提取年月日
這篇文章主要介紹了pandas進(jìn)行時(shí)間數(shù)據(jù)的轉(zhuǎn)換和計(jì)算時(shí)間差并提取年月日,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
Pytorch Conda環(huán)境下載慢換源/刪源/恢復(fù)默認(rèn)源的簡(jiǎn)單操作
隨著實(shí)驗(yàn)增多,需要分割創(chuàng)建環(huán)境的情況時(shí)有出現(xiàn),在此情況下使用conda create --name xx python=3.10 pytorch torchvision pytorch-cuda -c nvidia -c pytorch -y這樣的指令創(chuàng)建時(shí)如果不換源,往往下載速度很慢,本文介紹了解決辦法,需要的朋友可以參考下2024-07-07
python shell命令行中import多層目錄下的模塊操作
這篇文章主要介紹了python shell命令行中import多層目錄下的模塊操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
Python3按一定數(shù)據(jù)位數(shù)格式處理bin文件的方法
今天小編就為大家分享一篇Python3按一定數(shù)據(jù)位數(shù)格式處理bin文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01

