Python批量提取多XML文件标签文本写入CSV的报错如何解决?
错误原因分析
- 第一个
AttributeError报错原因:soup.findAll(text=True)返回的结果本身就是NavigableString类型的文本对象,不存在get_text()方法,直接使用该对象即可获取文本内容。 - 第二个报错原因:
except后必须填写继承自BaseException的异常类,NavigableString是数据类型不属于异常类,不符合语法要求。
正确解决方法
无需添加异常捕获,直接修改文本取值逻辑即可,优化后的完整代码如下:
import csv import glob from bs4 import BeautifulSoup dataExtracted = [] for filename in glob.glob(r'*.xml'): # 指定文件编码避免乱码问题 with open(filename, 'r', encoding='utf-8') as f_in: # 解析XML建议使用lxml-xml模式,匹配XML语法规则更准确 soup = BeautifulSoup(f_in.read(), 'lxml-xml') print(filename) for text_content in soup.findAll(text=True): # 去除首尾空白字符,过滤纯空白的无效文本 cleaned_text = text_content.strip() if cleaned_text: print(cleaned_text) dataExtracted.append([filename, cleaned_text]) # 输出CSV使用utf-8-sig编码,避免Excel打开时中文乱码 with open('data.csv', 'w', newline='', encoding='utf-8-sig') as csvfile: # 修正quotechar为原生双引号,原代码的"是HTML转义字符,不适用CSV场景 csv_writer = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL) # 可选写入表头,方便后续查看 csv_writer.writerow(['文件名', '提取文本']) csv_writer.writerows(dataExtracted)
内容的提问来源于stack exchange,提问作者Satanas
相关产品推荐
相关产品推荐

