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

使用Python BeautifulSoup抓取IMDB全部影评 解决仅能获取25条的问题

问题原因

IMDB影评页默认单页仅返回25条静态渲染的内容,剩余影评需要点击「加载更多」按钮通过AJAX异步加载,你当前的代码仅抓取了第一页的静态HTML,因此只能获取到25条数据。

解决方法

推荐优先使用模拟AJAX请求的方案,无需启动浏览器,运行效率高,实现逻辑如下:

  • 首先请求第一页影评页,提取当前页的所有影评,同时从页面的load-more-data标签中提取分页参数paginationKey
  • 携带该参数请求IMDB的影评AJAX接口,获取下一页的影评数据与新的分页参数
  • 循环上述步骤,直到返回的分页参数为空,即可获取全部影评

完整实现代码

import requests
from bs4 import BeautifulSoup
import time

# 配置请求头,避免被反爬拦截
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",
    "Accept-Language": "en-US,en;q=0.9"
}

all_reviews = []
base_url = "https://www.imdb.com/title/tt6654210/reviews"
next_pagination_key = None

# 抓取第一页内容
response = requests.get(base_url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")
# 提取第一页影评
first_page_reviews = soup.select(".review-container")
all_reviews.extend(first_page_reviews)
# 提取第一页的分页key
load_more_tag = soup.select_one(".load-more-data")
if load_more_tag:
    next_pagination_key = load_more_tag.get("data-key")

# 循环抓取剩余内容
while next_pagination_key:
    # 间隔1秒,避免触发反爬
    time.sleep(1)
    ajax_url = f"{base_url}/_ajax?paginationKey={next_pagination_key}"
    ajax_response = requests.get(ajax_url, headers=headers)
    response_data = ajax_response.json()
    # 解析返回的影评HTML片段
    ajax_soup = BeautifulSoup(response_data["html"], "html.parser")
    current_page_reviews = ajax_soup.select(".review-container")
    if not current_page_reviews:
        break
    all_reviews.extend(current_page_reviews)
    # 更新下一页的分页key,没有key就终止循环
    next_pagination_key = response_data.get("paginationKey")

print(f"共抓取到{len(all_reviews)}条影评")
注意事项
  • 必须携带User-Agent请求头,否则IMDB会直接返回403拒绝访问
  • 请求添加间隔时间,不要短时间高频请求,避免被IP封禁
  • 爬虫仅可用于个人学习用途,遵守网站的robots协议与使用条款

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 14:45:04