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

使用BeautifulSoup爬取IMDB喜剧片数据遇两类问题求解决

IMDB喜剧片数据爬取问题解决方案

问题1:部分影片无runtime字段,调用get_text()报错

当find()方法找不到对应元素时会返回None,直接调用get_text()会触发"不可调用"错误。解决思路是先判断元素是否存在,再提取文本:

  • 获取目标元素后,若元素存在则调用get_text(),否则赋值为预设默认值(比如"无时长数据")

问题2:无法正确获取影片描述

原代码中p.text获取的是第一个<p>标签内容,而IMDB页面里影片描述是第二个带text-muted类的<p>标签,需要指定提取第二个标签的内容。

修改后的完整代码

import requests
from bs4 import BeautifulSoup

source = requests.get('https://www.imdb.com/search/title/?title_type=feature&genres=comedy&explore=genres')
source.raise_for_status()
    
soup = BeautifulSoup(source.text, 'html.parser')
    
comedy_movies = soup.find_all('div', class_ = "lister-item mode-advanced")

for movie in comedy_movies:
    # 电影标题
    movie_title = movie.find('div', class_ = 'lister-item-content').a.text
    # 分级信息
    advisory = advisory.get_text(strip=True) if (advisory := movie.find('span', class_ = 'certificate')) else '无分级数据'
    # 影片时长
    runtime = runtime.get_text(strip=True) if (runtime := movie.find('span', class_ = 'runtime')) else '无时长数据'
    # 影片类型
    genre = genre.get_text(strip=True) if (genre := movie.find('span', class_ = 'genre')) else '无类型数据'
    # IMDB评分
    rating = rating.get_text(strip=True) if (rating := movie.find('span', class_ = 'global-sprite rating-star imdb-rating')) else '无评分数据'
    # 元评分
    metascore = metascore.find('span').get_text(strip=True) if (metascore := movie.find('div', class_ = 'inline-block ratings-metascore')) else '无元评分数据'
    # 影片描述
    desc_p_list = movie.find('div', class_ = 'lister-item-content').find_all('p', class_='text-muted')
    description = desc_p_list[1].get_text(strip=True) if len(desc_p_list) >=2 else '无描述数据'
    
    print(f"标题: {movie_title}")
    print(f"分级: {advisory}")
    print(f"时长: {runtime}")
    print(f"类型: {genre}")
    print(f"IMDB评分: {rating}")
    print(f"元评分: {metascore}")
    print(f"描述: {description}\n")

关键修改点说明

  • 所有可能为空的字段都添加了存在性判断,避免None调用方法的报错
  • 影片描述通过find_all('p', class_='text-muted')获取所有目标p标签,取索引1的元素(第二个)拿到正确描述
  • 使用strip=True去除文本中的多余空格和换行符,让输出数据更整洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:15:45