Python网页爬取CSV写入问题:如何实现数据逐行存储
问题解决:网页爬取后逐行写入CSV
你的代码存在几个关键问题,导致所有数据集中在单个单元格:
- 在遍历
h2标签的循环内直接将DOM对象转为文本,破坏了后续节点操作,且每次循环用w模式打开文件会覆盖之前的内容。 - 未将提取到的文本拆分为单独条目,直接把整块内容写入一行。
以下是修正后的代码,实现每条数据逐行写入CSV:
import requests from bs4 import BeautifulSoup from csv import writer url = 'https://virtualhs.pwcs.edu/about/faculty' res = requests.get(url) soup = BeautifulSoup(res.content, 'lxml') content_div = soup.find('div', id='divContent') if content_div: # 移除所有不需要的p标签 for p in content_div.select("p"): p.extract() # 获取页面中所有教师信息条目(对应ul下的li标签) faculty_items = content_div.select("li") # 打开CSV文件,一次性写入所有内容 with open('now.csv', 'w', encoding='utf-8', newline='') as f: thewriter = writer(f) # 可选:写入表头 thewriter.writerow(["教师信息"]) # 遍历每个条目,清理后逐行写入 for item in faculty_items: # 去除文本中多余的换行和空格 clean_info = ' '.join(item.text.strip().split()) thewriter.writerow([clean_info])
关键修正说明:
- 先完成所有DOM清理操作,再提取目标条目,避免中途破坏节点结构。
- 针对每个独立的教师信息条目调用
writerow,实现一行一条数据。 - 添加文本清理步骤,去除冗余换行和空格,让CSV内容更整洁。
- 一次性打开文件完成写入,避免多次打开覆盖已有内容。
内容的提问来源于stack exchange,提问作者Syed
相关产品推荐
相关产品推荐

