注意:对于“Excel无法打开文件xxx.xlsx,因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配”这个问题,网上有很多解决办法,但是都集中于恢复excel,不适用于爬虫因为异常中断而损坏excel,因此本文提出彻底解决这个问题的方法。
问题描述
运行写的python爬虫程序时,把爬取到的数据存储在.xlsx文件中。
workbook.save('./amazon.xlsx')
但是尝试打开.xlsx文件时,会报错:Excel无法打开文件amazon.xlsx,因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配”
问题分析
一开始我以为是因为文件格式或扩展名原因,去网上搜到一堆教程,什么修改注册表,修改.xlsx为.xls。都没用
然后我认为是因为文件损坏,去尝试各种修复方法,包括不限于用excel自带恢复,用专门恢复excel的软件进行恢复。也都没用。
看来就是文件损坏太严重了。那么是怎么造成的呢?核查代码,发现了问题所在:
我这个爬虫文件需要先爬到一个数据,然后将爬到的数据写入amazon.xlsx,最后再保存。如此循环往复。
由于爬虫的数据量太大,无法正常爬完,经常要中断程序,(或者遇到断电断网等意外)这时如果程序没有及时运行到上面那个代码就关闭了的话,就会造成.xlsx文件的损坏
解决办法
.xlsx文件只能打开,不能追加,并且读写速度较慢,文件意外损坏几率高。
而.csv文件不仅读写方便,而且能够以追加模式而非覆盖模式使用,更加适合爬虫这种容易中断异常的情况。
将原来的创建.xlsx文件、写入.xlsx文件以及保存.xlsx文件的代码全部改为.csv形式即可。
启示
爬虫尽量用csv来储存,用xlsx容易出错,速度还慢。