如何使用 Python 从 IMDb 网站精准提取电视剧详情页 URL

星婷酱_9590

星婷酱_9590

2026-07-11

395人浏览

原创

如何使用 Python 从 IMDb 网站精准提取电视剧详情页 URL

本文详解如何通过 requests + beautifulsoup 正确提取 imdb 排行榜页面中每部剧集的详情页链接,重点解决 403 错误、无效爬取及链接泛化问题,并提供可直接运行的健壮代码示例。

本文详解如何通过 requests + beautifulsoup 正确提取 imdb 排行榜页面中每部剧集的详情页链接,重点解决 403 错误、无效爬取及链接泛化问题,并提供可直接运行的健壮代码示例。

在使用 Python 进行网页数据采集时,尤其是针对 IMDb 这类反爬机制较严格的网站,常见失败原因并非代码逻辑错误,而是忽略了 HTTP 请求的基本规范。你提供的两段代码均未设置请求头(headers),导致服务器返回 403 Forbidden 响应(虽可能静默处理为首页内容),从而无法获取真实目标链接——这也是为何只得到主站 URL 或空/杂乱结果的根本原因。

此外,原始代码中采用递归遍历全站所有 标签的方式存在严重缺陷:

  • ❌ 无目标过滤:抓取了导航栏、广告、页脚等无关链接;
  • ❌ 无限递归风险:未限制深度或域名范围,易陷入死循环或触发风控;
  • ❌ 协议混淆:IMDb 的剧集链接多为相对路径(如 /title/tt1234567/),直接拼接 https:// 会导致 404;
  • ❌ 缺乏容错与去重:未处理空 href、重复链接或异常字符。

✅ 正确做法是:精准定位 + 合规请求 + 结构化提取。以下为优化后的完整方案:

提示词大师-python版
提示词大师-python版

图片提示词生成器?不止如此。 马甲系统 —— 把脑海中的画面,翻译成AI能理解的专业表达。 用得越多,它越懂你:首次需要多问几句确认方向,用久了几乎一说就懂。 用得越多,它越快:缓存机制让后续对话越来越省。 RAG进化:成功案例持续入库,越跑越聪明。 输入「新手指南」查看完整功能介绍

下载
import requests
from bs4 import BeautifulSoup
import pandas as pd

# 关键:设置合法 User-Agent,模拟真实浏览器请求
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"
}

url = "https://www.imdb.com/chart/toptv/"

try:
    response = requests.get(url, headers=headers, timeout=10)
    response.raise_for_status()  # 显式抛出网络错误
except requests.exceptions.RequestException as e:
    print(f"请求失败: {e}")
    exit()

soup = BeautifulSoup(response.content, "html.parser")

# 使用 CSS 选择器精准定位:href 以 "/title/" 开头 且 包含 <h3> 标签的 <a> 元素
# 此 selector 直接对应 IMDb 榜单中每一行剧集标题的锚点
show_links = soup.select('a[href^="/title/"]:has(h3)')

# 提取结构化数据:完整 URL + 清洗后的剧名
data = []
for a in show_links:
    href = a.get("href")
    if href and href.startswith("/title/"):
        full_url = f"https://www.imdb.com{href.rstrip('/')}/"  # 标准化结尾斜杠
        # 提取标题:通常格式为 "1. Stranger Things" → 取 ". " 后部分
        raw_text = a.get_text(strip=True)
        title = raw_text.split(". ", 1)[-1] if ". " in raw_text else raw_text
        data.append({"url": full_url, "title": title})

# 生成 DataFrame 并保存
df = pd.DataFrame(data)
print(f"成功提取 {len(df)} 部剧集链接")
print(df.head())

# 可选:导出 CSV
# df.to_csv("imdb_top_tv_shows.csv", index=False, encoding="utf-8-sig")</a>
</h3>

? 关键要点总结:

  • 必须设置 User-Agent:否则多数现代网站会拒绝请求;
  • 用 soup.select() 替代 find_all():CSS 选择器语法更简洁、语义更明确,[href^="/title/"] 表示“href 属性以 /title/ 开头”,:has(h3) 确保该链接内嵌剧名标题(避免抓取海报图、评分图标等干扰元素);
  • 手动拼接绝对 URL:IMDb 所有剧集页均为相对路径,需补上前缀 https://www.imdb.com;
  • 添加异常处理与超时:提升脚本鲁棒性;
  • 避免递归爬取:本场景只需单页解析,无需深度遍历。

⚠️ 注意事项:

  • IMDb 明确禁止未经许可的大规模自动化抓取,请遵守 robots.txt(https://www.imdb.com/robots.txt)并控制请求频率(建议 ≥ 2 秒间隔);
  • 若需长期项目,建议注册 IMDb API 或使用官方数据集;
  • 本代码适用于教学与小规模分析,生产环境请增加代理轮换、会话管理及 HTML 结构变更监控。

掌握这种“精准选择器 + 合规请求”的范式,可高效复用于豆瓣、烂番茄等主流影视平台的数据采集任务。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1631

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

3964

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1629

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

22797

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2807

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2847

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1123

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

596

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2203

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程