You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python爬虫爬取数据无法写入CSV的问题排查与解决求助

谷歌爬取数据无法正确写入CSV的问题分析与解决

我来帮你拆解这个问题:

问题原因

你代码最后用csv.writer的writerows()方法写入data列表,但data中的元素是字典对象。csv.writer默认只能处理序列(比如列表、元组),当你传入字典时,它会迭代字典的键(也就是'rank'、'title'、'description'),所以最终CSV里只出现了这些键名,完全没写入实际的爬取数据。

另外,你原本也没有主动写入表头的逻辑,反而因为字典的迭代特性,把键名当成了内容行输出,这就导致了CSV里只有这三个字符串的问题。

解决方案

这里有两种可靠的解决方式,推荐第一种,因为它更适配你当前的字典格式数据:

方法1:使用csv.DictWriter(推荐)

csv模块提供了DictWriter类,专门用来处理字典格式的数据集,能自动匹配键和列的对应关系。修改你代码末尾的CSV写入部分:

if __name__ == '__main__':
    keywords = ['python']
    data = []
    for keyword in keywords:
        try:
            results = scrape_google(keyword,2, "en")
            for result in results:
                data.append(result)
        except Exception as e:
            print(e)
        finally:
            time.sleep(1)
    print(data)
    
    # 新增判断:确保有数据再写入
    if data:
        # 定义CSV表头,和字典的键完全对应
        fieldnames = ['rank', 'title', 'description']
        # 使用with语句自动管理文件,newline=''避免Windows下空行问题
        with open('python_scrape.csv', 'w', newline='') as csvFile:
            writer = csv.DictWriter(csvFile, fieldnames=fieldnames)
            writer.writeheader()  # 写入表头行
            writer.writerows(data)  # 批量写入所有字典数据
    # 无需手动调用csvFile.close(),with会自动处理

方法2:将字典转换为列表后用csv.writer写入

如果你更习惯用基础的csv.writer,可以把每个字典转换成包含对应值的列表,注意顺序要和表头一致:

if __name__ == '__main__':
    keywords = ['python']
    data = []
    for keyword in keywords:
        try:
            results = scrape_google(keyword,2, "en")
            for result in results:
                # 把字典的值按表头顺序转换成列表
                data.append([result['rank'], result['title'], result['description']])
        except Exception as e:
            print(e)
        finally:
            time.sleep(1)
    print(data)
    
    with open('python_scrape.csv', 'w', newline='') as csvFile:
        writer = csv.writer(csvFile)
        # 先写入表头
        writer.writerow(['rank', 'title', 'description'])
        # 写入所有数据行
        writer.writerows(data)

额外提示

  1. 谷歌页面结构变化:你代码里用的选择器(比如class='g'、class='r')可能已经失效,导致爬取不到数据。可以先打印results看看是否为空列表,如果是空的,需要用浏览器开发者工具查看当前谷歌搜索结果的HTML结构,更新BeautifulSoup的选择器。
  2. 资源管理:永远不要手动调用csvFile.close(),with语句会自动帮你关闭文件,避免资源泄漏。

内容的提问来源于stack exchange,提问作者Etienne Gozlan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:57:30