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

Python爬虫报错AttributeError: 'str'对象无'text'属性,求修复

错误原因及修复方案

错误根源

第14行报错是因为你把BeautifulSoup的Tag对象转成字符串(str(i))后,试图调用字符串不存在的.text属性。字符串类型本身没有.text方法,这直接触发了AttributeError。另外,即便前面的.text调用没问题,.split()返回的是列表,列表同样没有.text属性,这是双重错误。

修复后的代码

import requests
import csv
from bs4 import BeautifulSoup as bs

# 用with语句自动管理文件,避免手动关闭的遗漏问题
with open('급식.csv', 'a', newline='') as file:
    add = []
    writer = csv.writer(file)
    p = requests.get('https://www.gnu.ac.kr/main/ad/fm/foodmenu/selectFoodMenuView.do')

    soup = bs(p.text, "html.parser")
    # 注意:thead是表头区域,若要提取菜单内容,建议改用tbody的tr,即下面注释的选择器
    # t = soup.select("div > table > tbody > tr")
    t = soup.select("div > table > thead > tr")

    for i in t:
        # 直接用get_text处理<br>标签,指定分隔符为逗号,同时去除首尾空白
        item_content = i.get_text(separator=',', strip=True)
        # 将内容拆分为列表,适配CSV写入的格式要求
        add.append(item_content.split(','))
    
    writer.writerows(add)

关键修改点

  • 移除多余的str(i)转换,直接对Tag对象调用get_text()方法,该方法支持通过separator参数将<br>标签替换为指定字符,无需手动处理字符串。
  • 删除错误的.text.split().text调用,split(',')会将处理后的文本拆分为列表,符合CSV写入的格式需求。
  • 改用with语句管理文件,自动完成文件关闭操作,避免资源泄漏。
  • 额外提示:当前代码选择的是表头行(thead > tr),如果你的目标是提取菜单内容,应该将选择器改为tbody > tr,这更贴合实际需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 02:45:58