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

Python爬取IMDB电影名返回空列表的元素路径定位问题求解

问题根因

代码返回空列表是两个低级错误导致的:

  • 爬取地址错误:当前代码填入的是IMDB搜索结果页URL,不是目标Top250榜单页地址
  • 元素选择器完全不匹配页面结构:你查找的<div class="lister-list">在目标页面不存在,Top250的榜单容器是<tbody class="lister-list">,这行代码返回空结果集,后续for循环根本没有执行,自然拿不到任何数据。
修正后的实现逻辑
  1. 替换URL为Top250榜单实际地址
  2. 修正容器定位,匹配页面实际的tbody标签
  3. 遍历容器下所有tr标签(每个tr对应一部电影条目)
  4. 在每个条目内定位标题列,提取a标签内的电影名称文本

可直接运行的代码片段:

import requests 
from bs4 import BeautifulSoup
import pandas as pd

headers = {"Accept-Language": "en-US, en;q=0.5"}
# 替换为Top250榜单地址
url = "https://www.imdb.com/chart/top/?ref_=nv_mv_250"
results = requests.get(url, headers=headers)
soup = BeautifulSoup(results.text, "html.parser")

titles = []
years = []
imdb_rating = []
metascores = []
votes = []
us_gross = []

# 正确定位榜单容器
movie_container = soup.find('tbody', class_='lister-list')
# 遍历所有电影条目
for movie in movie_container.find_all('tr'):
    # 提取电影名称
    title_column = movie.find('td', class_='titleColumn')
    movie_name = title_column.a.text.strip()
    titles.append(movie_name)

    # 其余字段可按相同逻辑补充,参考示例:
    # 上映年份
    # movie_year = title_column.span.text.strip('()')
    # years.append(movie_year)
    # 评分
    # rating_column = movie.find('td', class_='ratingColumn imdbRating')
    # rating = rating_column.strong.text.strip()
    # imdb_rating.append(rating)

print(titles)
# 后续pandas转结构化数据、导出CSV的逻辑可直接复用原有代码
调试建议
  • 调试阶段保留soup.prettify()的打印逻辑,对照实际返回的HTML结构写选择器,不要凭经验猜测标签和类名
  • 元素定位优先找带唯一类名、id的上层容器,再逐层向下查找子元素,不要直接写跨层级的链式属性调用(比如原有代码的container.tr.td.a),很容易因为层级不匹配返回空值或者报错
  • 提取文本后统一加strip()方法,清除多余的换行、空格字符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:36:16