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

使用Beautiful Soup爬虫时遭遇NoneType属性错误求助

解决爬取Money-Control新闻时的AttributeError问题

错误原因

触发AttributeError: 'NoneType' object has no attribute 'text'的核心原因是:代码中link.find("strong")或link.find(class_="PT3 a_10dgry")未找到目标元素,返回了None,直接调用.text属性就会报错。常见诱因包括:

  • 目标网页结构更新,原有的标签/类名已失效
  • 部分新闻条目缺失指定元素(存在异常条目)
  • 反爬机制导致请求未返回正常页面内容

解决方案

1. 安全访问元素属性

先判断元素是否存在,再获取文本,避免直接调用.text:

for link in data_array_tcs:
    # 处理标题
    title_elem = link.find("strong")
    title_all = title_elem.text if title_elem else "无标题"
    
    # 处理日期(同理)
    date_elem = link.find(class_="PT3 a_10dgry")
    date_all = date_elem.text if date_elem else "无日期"
    
    # 后续处理逻辑

2. 验证并更新选择器

手动打开Money-Control目标页面,右键「检查」元素,确认:

  • 新闻标题是否仍在<strong>标签内
  • 日期元素的类名是否还是PT3 a_10dgry
    若网页结构已变更,需同步修改代码中的选择器(比如换成新的标签、类名或CSS选择器)。

3. 应对反爬机制

财经网站普遍存在反爬,可通过以下方式优化请求:

import requests
from bs4 import BeautifulSoup

# 模拟浏览器请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

# 带请求头发起请求
response = requests.get("你的目标新闻列表URL", headers=headers)
soup = BeautifulSoup(response.text, "html.parser")

若页面为动态加载(滚动才加载更多内容),需使用Selenium/Playwright等工具模拟浏览器渲染。

4. 调试定位异常条目

通过打印输出定位具体哪条数据出问题:

for idx, link in enumerate(data_array_tcs):
    print(f"处理第{idx+1}条数据")
    print(f"当前条目HTML:\n{link.prettify()}")  # 打印条目完整HTML
    title_elem = link.find("strong")
    if not title_elem:
        print("⚠️ 未找到标题元素,跳过该条目")
        continue
    # 后续处理

内容的提问来源于stack exchange,提问作者Renju varghese

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:15:35