IMDbPY中get_top250_movies()返回空列表问题求助
IMDbPY调用get_top250_movies返回空列表的原因与解决方案
问题原因
- 库停止维护:原IMDbPY库已停止更新,IMDb官方页面结构、数据接口发生变更,旧版本无法适配新的请求逻辑,导致获取不到有效数据。
- 网络访问限制:IMDb存在反爬机制,若你的IP被识别为爬虫或所在地区无法正常访问IMDb,请求会被拦截,最终返回空列表。
- 客户端配置缺失:默认的HTTP客户端未设置模拟浏览器的请求头,被IMDb服务器判定为非合法请求,拒绝返回数据。
解决方案
1. 迁移至维护中的替代库Cinemagoer
IMDbPY已正式更名为Cinemagoer并持续维护,完全兼容原API接口:
- 卸载旧库并安装新库:
pip uninstall IMDbPY -y pip install cinemagoer
- 使用原代码即可正常获取数据:
from imdb import IMDb imdb_instance = IMDb() top250 = imdb_instance.get_top250_movies() print(top250)
2. 解决网络访问问题
- 配置代理:若IP被拦截或地区无法访问,初始化时添加代理配置:
from imdb import IMDb # 替换为你的代理地址和端口 proxy_config = {'http': 'http://proxy.example.com:8080', 'https': 'https://proxy.example.com:8080'} imdb_instance = IMDb(proxy=proxy_config) top250 = imdb_instance.get_top250_movies()
- 添加请求头:模拟浏览器的User-Agent可绕过基础反爬检测:
from imdb import IMDb imdb_instance = IMDb() imdb_instance._urlOpener.addheaders = [('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36')] top250 = imdb_instance.get_top250_movies()
3. 手动爬取IMDb Top250页面
若上述方案仍失效,可直接爬取IMDb官方Top250页面并解析数据:
import requests from bs4 import BeautifulSoup # 模拟浏览器请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' } response = requests.get('https://www.imdb.com/chart/top/', headers=headers) soup = BeautifulSoup(response.text, 'html.parser') top250_movies = [] # 解析页面中的电影条目 for item in soup.select('li.ipc-metadata-list-summary-item'): rank_title = item.find('h3', class_='ipc-title__text').text.split('. ', 1) rank = rank_title[0] title = rank_title[1] rating = item.find('span', class_='ipc-rating-star--rating').text top250_movies.append(f"#{rank} {title} - 评分: {rating}") for movie in top250_movies: print(movie)
内容的提问来源于stack exchange,提问作者Hani Rahimi
相关产品推荐
相关产品推荐

