You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 13:01:04