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

使用Python爬取IMDB电影数据保存为CSV为空问题求助

问题修复指导

你代码存在的核心问题

  • 缩进错误:import requests,csv 行存在多余缩进,会直接触发语法错误
  • 反爬拦截:IMDB对无请求头的裸请求会返回验证页面,你拿到的soup根本没有目标电影节点,数据提取循环完全未执行
  • 未存储提取数据:你仅把爬取到的内容打印到控制台,没有存入变量,后续调用的data属于未定义变量,运行会报错
  • 写法兼容性问题:import files、data.to_csv属于Google Colab专属写法,本地运行环境完全不支持

可直接运行的修正代码

from bs4 import BeautifulSoup
import requests,csv

# 添加请求头模拟浏览器,绕过IMDB反爬
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
source = requests.get('https://www.imdb.com/chart/top', headers=headers)
soup = BeautifulSoup(source.text, 'html.parser')

movies = soup.find('tbody', class_="lister-list").find_all('tr')
# 初始化列表存储所有电影数据
movie_data = []
# 先加表头
movie_data.append(["排名", "电影名称", "上映年份", "评分"])

for movie in movies: 
    name = movie.find('td',class_="titleColumn").a.text
    rank = movie.find('td',class_="titleColumn").get_text(strip=True).split('.')[0]
    year = movie.find('td',class_="titleColumn").span.text.strip('()')
    rating = movie.find('td',class_="ratingColumn imdbRating").strong.text
    # 把单条数据存入列表
    movie_data.append([rank, name, year, rating])
    print(rank,name,year,rating)

# 写入CSV文件,本地运行直接在代码同目录生成文件
with open('sample.csv', 'w', newline='', encoding='utf-8-sig') as f:
    writer = csv.writer(f)
    writer.writerows(movie_data)

# 如果是在Google Colab环境运行,取消注释下面两行即可触发下载
# from google.colab import files
# files.download("sample.csv")

额外说明

  • 代码使用标准csv模块写入文件,不需要额外安装pandas依赖
  • 编码指定为utf-8-sig是为了兼容Excel打开CSV时不乱码
  • 如果后续需要用pandas处理数据,只需要把movie_data转成DataFrame即可,示例:
import pandas as pd
data = pd.DataFrame(movie_data[1:], columns=movie_data[0])
data.to_csv('sample.csv', index=False, encoding='utf-8-sig')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:51:04