不使用pandas实现爬取内容仅写入CSV第一列(解决逗号拆列问题)
问题原因
手动逐行写入文本的方式没有遵循CSV格式的转义规则。CSV默认以逗号作为列分隔符,当爬取文本包含逗号时,表格工具打开文件会默认将逗号前后内容拆分到不同列。
解决方案
无需安装pandas,直接调用Python标准库内置的csv模块即可解决。该模块会自动对文本中的逗号、换行、引号等特殊字符做转义处理,保证单条内容始终存放在第一列。
使用时注意两个细节:
- 打开文件时需指定
newline=''参数,避免写入后出现多余空行 - 调用
writerow方法时传入单元素列表,即可将内容单独写入第一列
修改后代码
import csv import requests from bs4 import BeautifulSoup i = 1 # 提前初始化文件写入对象,避免循环内反复开关文件损耗性能 with open("/Users/Rex/Desktop/data.csv", "a", newline='', encoding='utf-8') as file_object: writer = csv.writer(file_object) for url in urls: print(f'Scraping the URL no {i}') i += 1 response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') links = [] for item in soup.find('div', class_='entry-content').find_all('div', class_='streak'): link = item.a['href'] text = item.a.text links.append(link) # 传入单元素列表,内容仅写入第一列,特殊字符自动转义 writer.writerow([text])
其他可选方案
如果不想使用csv模块,也可以手动给每条文本前后包裹双引号,同时将文本内部的双引号替换为两个双引号实现转义,但这种方式容易遗漏换行、制表符等其他会干扰CSV解析的特殊字符,优先使用标准库方案稳定性更高。
内容的提问来源于stack exchange,提问作者Mia
相关产品推荐
相关产品推荐

