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

使用urllib爬取IMDb榜单生成DataFrame失败,求技术帮助

IMDb Top榜单爬取问题修复

原代码存在的问题

  • 循环中始终引用第一个电影的film对象,而非当前迭代的films,导致所有条目重复第一条数据
  • 标题查找用了硬编码的title属性值,只能匹配《肖申克的救赎》这一部电影,无法适配其他条目
  • 排名选择器错误,误取了评分列的内容,实际排名在titleColumn列中
  • 未导入pandas库,代码中调用pd.DataFrame会报错
  • 字典里film字段存储的是BeautifulSoup节点对象,而非标题文本
  • 直接用urlopen请求易被IMDb反爬拦截,需添加请求头伪装浏览器

修复后的完整代码

from urllib.request import urlopen, Request
from bs4 import BeautifulSoup
import pandas as pd

# 添加请求头,伪装浏览器
url = 'https://www.imdb.com/chart/top/?sort=rk,asc&mode=simple&page=1'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}
req = Request(url, headers=headers)
page = urlopen(req)
soup = BeautifulSoup(page, 'html.parser')

film_in = soup.find('tbody', class_='lister-list').find_all('tr')

imdb = []

def remove_parentheses(string):
    return string.replace("(", "").replace(")", "").replace("\n", "").strip()

for film in film_in:
    # 提取标题:定位titleColumn下的a标签
    title_tag = film.find('td', class_='titleColumn').find('a')
    titre = title_tag.text
    
    # 提取排名:从titleColumn的文本中拆分
    rang_text = film.find('td', class_='titleColumn').get_text(strip=True).split('.')[0]
    
    # 提取年份
    année = remove_parentheses(film.find('span', class_='secondaryInfo').text)
    
    # 提取评分
    rating = film.find('td', class_='ratingColumn imdbRating').find('strong').text
    
    dictionnaire = {
        'film': titre,
        'rang': rang_text,
        'année': année,
        '评分': rating
    }
    imdb.append(dictionnaire)

df_imdb = pd.DataFrame(imdb)
print(df_imdb.head())

关键修改说明

  • 添加Request对象并设置User-Agent请求头,避免被反爬拦截
  • 循环中使用当前迭代的film对象,确保每条数据对应不同电影
  • 用通用选择器td.titleColumn a定位标题,适配所有电影条目
  • 从titleColumn的文本中拆分出排名,解决原选择器错误问题
  • 导入pandas库,确保DataFrame能正常实例化
  • 字典中存储标题文本而非节点对象,同时补充评分字段让数据更完整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:35:20