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

使用BeautifulSoup爬取IMDb剧情梗概板块代码失效问题求助

IMDb剧情梗概爬取失败排查与修复方案

核心失败原因

运行原代码会返回空列表[],拿不到目标内容,核心是两个问题:

  • 直接用requests默认请求头访问IMDb会触发基础反爬:默认请求的User-Agent标识为python-requests/xx版本,IMDb会直接拦截这类非浏览器请求,返回的要么是人机验证页,要么是未加载动态内容的空页面骨架,根本不存在你要查找的data-testid='storyline-plot-summary'节点。
  • 你已经导入了imdb(即IMDbPy第三方库)但完全没用到它的封装能力,手写页面解析逻辑不仅容易被反爬拦截,后续IMDb前端改版时也很容易失效。

可用修复方案

方案1:修正requests请求参数(保留原有页面解析逻辑)

给请求加上模拟真实浏览器的请求头,绕过基础反爬校验即可拿到正常页面内容,修复后代码如下:

import requests
from bs4 import BeautifulSoup

def get_summary(url):
    # 加入浏览器请求头,模拟普通用户访问
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
        "Accept-Language": "en-US,en;q=0.9"
    }
    r = requests.get(url=url, headers=headers)
    r.encoding = "utf-8"
    soup = BeautifulSoup(r.text, 'html.parser')
    summ = soup.find_all("div", attrs = {'data-testid': 'storyline-plot-summary'})
    # 提取纯文本内容,过滤HTML标签
    summary_text = [item.get_text(strip=True) for item in summ]
    print(summary_text)
    return summary_text

get_summary("https://www.imdb.com/title/tt0114709/")

注意:如果短时间内爬取频次过高还是会被IP封禁,需要加随机请求间隔、搭配代理池使用。

方案2:调用imdb库封装方法(稳定性更高)

你已经导入的IMDbPy库已经封装好了全量影视元数据的获取逻辑,不需要自己写页面解析规则,不会因为IMDb前端改版失效,代码更简洁:

from imdb import IMDb

ia = IMDb()
def get_summary(tt_id):
    # 传入影片tt号,即链接中tt后面的数字部分
    movie = ia.get_movie(tt_id)
    # 直接获取剧情梗概列表
    plot_list = movie.get("plot", [])
    print(plot_list)
    return plot_list

# 玩具总动员的tt号为0114709
get_summary("0114709")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:12:19