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

Python爬取IMDB影评时评分错位匹配问题如何解决

问题解决方法

出现评分与影评错位的核心原因是:原代码分别全局提取所有标题、所有评论内容、所有评分三个独立列表,再用zip()配对。当存在无评分的影评时,三个列表长度不一致,配对时就会出现数据偏移。

正确实现思路

  • 先定位到每条影评的完整父容器(IMDB单条影评的容器class为review-container)
  • 逐个遍历每个父容器,在容器内部单独提取对应影评的标题、内容、评分
  • 若当前容器内找不到评分元素,直接填充缺失值即可

修改后完整代码

import requests
from bs4 import BeautifulSoup
import pandas as pd
import numpy as np

url = (
    "https://www.imdb.com/title/tt6320628/reviews/_ajax?ref_=undefined&paginationKey={}"
)
key = ""
data = {"title": [], "review": [], "rating": []}

while True:
    response = requests.get(url.format(key))
    soup = BeautifulSoup(response.content, "html.parser")
    # 提取分页key
    pagination_key = soup.find("div", class_="load-more-data")
    if not pagination_key:
        break

    key = pagination_key["data-key"]
    # 先定位所有单条影评容器
    review_containers = soup.find_all(class_="review-container")
    for container in review_containers:
        # 单个容器内提取对应字段,保证匹配正确
        title = container.find(class_="title").get_text(strip=True)
        review = container.find(class_="text show-more__control").get_text()
        # 找不到评分则填充空值
        rating_tag = container.find(class_="rating-other-user-rating")
        rating = rating_tag.get_text(strip=True) if rating_tag else np.nan
        
        data["title"].append(title)
        data["review"].append(review)
        data["rating"].append(rating)

df = pd.DataFrame(data)
print(df)

补充说明

该写法保证每条影评的三个字段都从同一个容器提取,不会出现跨条匹配的问题,无评分的影评对应rating字段会自动填充空值,后续可以根据需求自行替换为其他占位符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 22:45:03