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
相关产品推荐
相关产品推荐

