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
相关产品推荐
相关产品推荐

