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

如何用try-catch处理NoneType对象无get_text属性的AttributeError并抓取全部趋势?

无推文计数条目的兼容处理方案

报错触发逻辑非常明确:部分趋势条目内部不存在承载推文计数的span节点,job_elem.find('span')返回None值后,直接调用get_text()就会抛出AttributeError。只要在提取计数文本前增加空值判断,就能兼容所有条目,完整输出全部趋势内容,不需要改动核心的页面解析逻辑。

关键调整方向

  • 所有趋势条目内的名称a标签是固定存在的,这部分内容可以正常提取,不会触发空值错误
  • 提取推文计数时,先判断find()的返回值是否为有效元素:存在就取对应文本,不存在就设置占位文本,避免对None对象调用方法
  • 给请求增加常规浏览器请求头,减少被目标站点反爬机制拦截的概率,提升脚本稳定性

可直接运行的修改后代码

from bs4 import BeautifulSoup
import requests

URL = "https://trends24.in/india/"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
}
html_resp = requests.get(URL, headers=headers, timeout=10)
soup = BeautifulSoup(html_resp.content, 'html.parser')
trend_container = soup.find(id='trend-list')
trend_items = trend_container.find_all('li')

for item in trend_items:
    # 提取趋势名称,a标签固定存在
    trend_title = item.find('a').get_text(strip=True)
    # 兼容无计数span的条目
    count_tag = item.find('span')
    trend_count = count_tag.get_text(strip=True) if count_tag else "无公开推文计数"
    print(f"{trend_title} | {trend_count}")

补充说明:如果不想单独做空值判断,也可以用try-except块包裹计数提取逻辑,捕获到AttributeError时返回默认值,实现效果和空值判断完全一致,提前做空值判断的逻辑可读性更好,执行效率也更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 19:06:01