Python爬虫保存数据到.xlsx提示格式或扩展名无效问题求助
问题修复方案
错误原因
- XLSX是二进制压缩的结构化文件格式,无法通过
open()直接写入纯文本内容,这是你打开文件报错的核心原因。 - 之前CSV格式异常是因为你直接拼接字符串写入,没有按CSV规范添加分隔符,也未做特殊字符清洗。
前置依赖安装
运行修复代码前先执行命令安装xlsx导出依赖:pip install openpyxl
修复后代码
from selenium import webdriver from bs4 import BeautifulSoup as Soup from urllib.request import urlopen import datetime as dt import pandas as pd import re # 定义文本清洗函数,剔除特殊字符、不可见字符 def clean_text(text): # 保留中英文、数字、常见常规标点,过滤乱码、特殊符号 return re.sub(r'[^\u4e00-\u9fa5a-zA-Z0-9,。、;:""''()()【】\[\].,;:!?@#$%^&*_\-+=<>/\\|\s]', '', text).strip() driver = webdriver.Firefox(executable_path='C://Downloads//webdrivers//geckodriver.exe') # 存储所有抓取到的有效数据 data_list = [] # 定义导出表头 columns = ["product_name", "price", "URL"] for c in range(1): a = f'https://www.flipkart.com/search?q=sony+headphones&as=on&as-show=on&otracker=AS_Query_HistoryAutoSuggest_1_4_na_na_na&otracker1=AS_Query_HistoryAutoSuggest_1_4_na_na_na&as-pos=1&as-type=HISTORY&suggestionId=sony+headphones&requestId=ad797917-16ae-401e-98df-1c79a43d40c3&as-backfill=on&page={c}' driver.get(a) page_soup = Soup(urlopen(a), 'html5lib') container = page_soup.find_all('div', {'class': '_4ddWXP'}) for containers in container: find_url = containers.find('a')['href'] new_url = 'https://www.flipkart.com' + find_url driver.get(new_url) page_source = driver.page_source page_soup = Soup(page_source, 'html.parser') try: product_name = clean_text(page_soup.find('span', {'class': 'B_NuCI'}).text.strip()) price = clean_text(page_soup.find('div', {'class': "_30jeq3 _16Jk6d"}).text.strip()) current_url = new_url data_list.append([product_name, price, current_url]) except: print('当前商品数据获取失败,跳过') # 构造结构化表格直接导出xlsx df = pd.DataFrame(data_list, columns=columns) file_name = 'amazon_data_' + dt.datetime.now().strftime("%d_%b_%y_%I_%M_%p") + '.xlsx' df.to_excel(file_name, index=False, engine='openpyxl') # 关闭浏览器进程 driver.quit()
修复说明
- 新增文本清洗逻辑,自动过滤所有特殊字符、乱码、不可见字符,保证输出内容干净
- 取消直接写文件的错误逻辑,改为先存储全部有效数据,最后通过pandas导出标准xlsx格式,自动匹配三列表头,无需手动处理单元格格式
- 修复原代码中冗余循环、异常捕获后变量未定义可能触发的隐性报错
内容的提问来源于stack exchange,提问作者Bhavya Lodaya
相关产品推荐
相关产品推荐

