Python按迭代写入列表到CSV时单链接字符拆分输出问题求助
问题排查
你代码的核心错误有3处:
- 文件打开逻辑错误:将
open("urls.csv", "w")写在双层循环内部,每次循环都会用写入模式清空原有文件内容,最终只会保留最后一次循环的写入结果 writerows用法错误:writerows接收的参数是多行数据组成的可迭代对象,每个行又是包含对应列字段的序列。你传入的links是单个字符串,字符串本身是字符的可迭代对象,所以会被拆解成单个字符逐行写入- 表头重复写入:表头
fields写在循环内,每次循环都会重复写入表头行,不符合CSV格式规范
另外你提取链接的方式也可以优化,不需要手动切片字符串,直接用BeautifulSoup提取节点内容更稳定。
修正后代码
import csv import requests from bs4 import BeautifulSoup # 先定义表头,全局只写一次 fields = ["Search Term", "URL"] # 提前打开文件,避免循环内重复打开覆盖原有内容 with open("urls.csv", "w", newline="", encoding="utf-8") as f: write = csv.writer(f) # 写入表头 write.writerow(fields) # 循环处理每个搜索词 for t in terms: url = f"https://news.google.com/rss/search?q={t}&hl=en-US&gl=US&ceid=US%3Aen" html_page = requests.get(url) soup = BeautifulSoup(html_page.text, "lxml") for item in soup.find_all("item"): # 直接提取link节点文本,无需手动切片 link = item.link.next_sibling.strip() # 按两列格式写入单行数据 write.writerow([t, link])
注:加newline=""是为了避免Windows系统下CSV写入出现多余空行,指定encoding="utf-8"避免特殊字符乱码
内容的提问来源于stack exchange,提问作者jimlearnscoding
相关产品推荐
相关产品推荐

