Python爬虫报错AttributeError: 'NoneType' object has no attribute 'text'求助
问题解决思路与修正代码
错误原因
出现AttributeError: 'NoneType' object has no attribute 'text'是因为某个URL对应的页面中找不到class为article-content的div元素,soup.find()返回了None,此时直接调用.text就会触发错误。
修正后的代码
import requests from bs4 import BeautifulSoup article_content = [] # 假设li是你的目标URL列表 for idx, url in enumerate(li): try: # 添加请求头模拟浏览器,降低被反爬拦截的概率 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } response = requests.get(url, headers=headers) # 检查请求是否成功(比如404、500这类状态码会直接抛出异常) response.raise_for_status() soup = BeautifulSoup(response.text, "html.parser") content_div = soup.find("div", {"class": "article-content"}) if content_div: # 提取文本并去除多余空格换行 content = content_div.text.strip() article_content.append(content) # 保存到独立文本文件,用索引命名避免重复 with open(f"article_{idx+1}.txt", "w", encoding="utf-8") as f: f.write(content) print(f"完成第{idx+1}篇文章的抓取与保存") else: print(f"第{idx+1}篇文章未找到目标内容区域,URL:{url}") except Exception as e: print(f"处理URL {url}时出错:{str(e)}")
关键改进点
- 空值判断:先确认目标元素存在,再调用
.text,从根源避免None报错 - 异常捕获:用
try-except包裹整个处理流程,保证单个URL出错不会中断整个循环 - 请求优化:添加
User-Agent和状态码检查,减少请求失败的概率 - 即时存储:每抓取一篇就保存到独立文件,避免中途出错丢失已抓取内容
- 状态反馈:打印操作状态,方便快速定位问题URL
额外建议
- 如果部分页面的内容容器class不同,可以尝试用更通用的选择器(比如提取所有
<p>标签拼接内容),或者手动检查页面结构调整选择器 - 可以添加
time.sleep(1)这类延迟,避免短时间内频繁请求触发网站的反爬机制
内容的提问来源于stack exchange,提问作者Vutavutipupajaki Kulakikibujha
相关产品推荐
相关产品推荐

