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


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

