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

如何用BeautifulSoup从IMDb榜单提取单部电影的Gross数据?

IMDb榜单票房数据提取解决方案

问题背景

已成功提取IMDb榜单中的电影标题,但使用span[name='nv']提取票房时,会同时获取到投票数(Votes)和票房(Gross)数据,无法单独精准提取每部电影的票房金额,需要实现标题与票房的对应提取并生成表格。

解决方案

核心思路是按单部电影的信息块遍历,在每个电影的独立容器内定位票房元素,避免全局查找导致的投票/票房混淆。

完整代码实现:

from bs4 import BeautifulSoup
import requests
import pandas as pd

url = "https://www.imdb.com/list/ls024149810/"
page = requests.get(url)
soup = BeautifulSoup(page.content, "html.parser")

# 存储电影数据的列表
movies = []

# 获取每部电影的信息容器
lister_items = soup.find_all('div', class_='lister-item-content')

for item in lister_items:
    # 提取电影标题
    title = item.find('h3', class_='lister-item-header').find('a').text
    
    # 提取票房数据:先定位包含"Gross:"的标签,再获取对应的金额
    gross_label = item.find('span', string='Gross:')
    if gross_label:
        # 票房金额在Gross:标签的下一个span元素中
        gross = gross_label.find_next_sibling('span')['data-value']
    else:
        # 部分电影可能无票房数据,标记为缺失值
        gross = pd.NA
    
    movies.append({'电影标题': title, '票房': gross})

# 生成DataFrame表格
df = pd.DataFrame(movies)
print(df)

代码说明

  1. 按电影容器遍历:通过div.lister-item-content定位每部电影的独立信息块,确保标题和票房属于同一部电影。
  2. 精准定位票房:利用span[string='Gross:']找到票房标签的前置文本,再通过find_next_sibling获取对应的金额元素,彻底避免和投票数混淆。
  3. 异常处理:对无票房数据的电影,用pd.NA标记,保证表格数据的完整性。

内容的提问来源于stack exchange,提问作者Juan Pablo Dávila Iriarte

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 13:15:29