网页抓取名单转CSV:如何拆分姓名与投票对应列
解决CSV拆分姓名与投票数据的问题
我懂你的痛点——现在每条数据都是"Name, Vote"这样的整串,要拆成两列还得保证姓名和投票结果一一对应对吧?其实只需要在循环里对每个字符串做拆分处理就行,几步就能搞定!
核心思路
针对每个类似"Clark, Yes"的字符串,用, (逗号加空格)作为分隔符拆分,这样就能得到一个包含姓名和投票结果的列表,直接把这个列表传给writerow(),就能自动分到CSV的A、B两列了。
修改后的完整代码
import urllib.request from bs4 import BeautifulSoup import csv poll_page = 'xurl.com' page = urllib.request.urlopen(poll_page) soup = BeautifulSoup(page, 'html.parser') name_box = soup.find('div', attrs={'class': 'xyz'}) name_list = name_box.text.splitlines() # 保留你原有的行拆分逻辑 with open('index.csv','w', newline='') as csv_file: thewriter = csv.writer(csv_file) thewriter.writerow(['Name','Vote']) # 写入表头 for item in name_list: # 把每条数据按", "分割成姓名和投票结果两个元素 name, vote = item.split(', ') thewriter.writerow([name, vote])
为什么这样可行?
item.split(', ')会把"Clark, Yes"拆成['Clark', 'Yes'],刚好对应CSV的两列- 直接把这个列表传给
writerow(),CSV写入器会自动把列表的每个元素放到单独的单元格里,完美保持对应关系
进阶优化(可选)
如果担心有些数据格式不规范(比如分隔符后没空格、或者姓名里带逗号),可以用csv.reader来安全解析单条字符串,避免报错:
import csv # 已导入,这里仅作示例 for item in name_list: # 用csv.reader解析单条行数据,自动处理分隔符和空格 row = next(csv.reader([item], delimiter=',', skipinitialspace=True)) if len(row) == 2: # 确保拆分后是有效两列数据 thewriter.writerow(row) else: print(f"格式异常的数据:{item}") # 打印异常数据方便排查
这样不管分隔符后面有没有空格,都能正确拆分,还能过滤掉格式不对的行,代码更稳健。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

