Python网页爬虫写入CSV文件出现多余换行空格如何解决
核心结论
用字典存储爬取数据完全不是解决CSV多余换行/空格问题的方案,二者没有任何因果关联。你观察到讲师用字典写代码没出现这个问题,本质是他在代码里做了文本清洗、或者写文件时传了正确参数,和数据结构选择没关系。
问题产生的两个根本原因
- 写CSV时的文件打开方式错误:Python官方csv模块明确要求,打开待写入的CSV文件必须传入
newline=''参数,否则在Windows环境下会自动在每两行内容之间插入一个空行,也就是你示例里表头、各条数据之间的空白行来源。 - 提取的文本未做清洗:通过BeautifulSoup的
get_text()拿到的内容,会原封不动保留网页源码里的换行符、缩进空格、首尾空白字符,这些不属于有效内容的格式字符被写入CSV后,就会出现单个单元格内容被拆成多行、前后带多余空格的问题。
修复后可直接运行的代码
import requests from bs4 import BeautifulSoup from csv import writer response = requests.get("http://quotes.toscrape.com/") soup = BeautifulSoup(response.text, "html.parser") quotes = soup.find_all(class_="quote") # 打开文件时新增newline=''参数,指定utf-8编码避免特殊字符乱码 with open("web_scraping.csv", "w", newline='', encoding='utf-8') as f: csv_writer = writer(f) csv_writer.writerow(["Title", "Author", "Link"]) for quote in quotes: # 提取文本后做清洗:去除首尾空白,删除内容里的换行、回车符 texts = quote.find(class_="text").get_text().strip().replace('\n', '').replace('\r', '') author = quote.find(class_="author").get_text().strip().replace('\n', '').replace('\r', '') link = quote.find("a")["href"].strip() csv_writer.writerow([texts, author, link])
补充说明
- 就算你改用字典+
DictWriter的方式写CSV,如果不做上述两个修正,一样会出现多余换行、空格的问题。DictWriter只是提供了按字段名映射写入的语法糖,不会自动帮你处理文件写入参数、清洗文本内容。 - 网页爬取的所有文本字段写入存储前都建议做空白字符清洗,网页源码里的换行、缩进是给浏览器渲染排版用的,不属于你要采集的有效文本内容。
内容的提问来源于stack exchange,提问作者Thor
相关产品推荐
相关产品推荐

