使用Python的Beautiful Soup爬取IMDB时无法找到指定href链接
解析IMDB页面找不到指定href的问题排查
一、代码本身的语法错误
你提供的代码存在两处明显问题:
- 变量赋值语法错误:
page(requests.get(url))缺少赋值符号,正确写法应为page = requests.get(url) - 未处理请求异常与属性存在性:直接遍历所有
<a>标签并读取href,会遇到无href属性的标签导致报错;同时未验证请求是否成功(IMDB有反爬机制,可能直接返回403状态码)
修正后的基础代码示例:
import requests from bs4 import BeautifulSoup url = "https://www.imdb.com/title/tt0068112/?ref_=fn_al_tt_1" # 添加UA头避免被识别为爬虫 page = requests.get(url, headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"}) if page.status_code != 200: print(f"请求失败,状态码:{page.status_code}") else: soup = BeautifulSoup(page.content, "html.parser") # 先判断标签是否包含href属性再输出 for a in soup.find_all('a'): if 'href' in a.attrs: print(a['href'])
二、页面动态加载导致链接缺失
即便修正代码,你仍可能找不到目标href,核心原因是:IMDB部分页面内容通过JavaScript动态渲染。requests只能获取服务器返回的静态HTML源码,而目标剧集列表链接(/title/tt0068112/episodes?ref_=tt_eps_sm)是页面加载完成后由JS动态插入的,因此静态源码中不存在该链接。
可行的解决方法:
- 使用支持JS渲染的工具(如
selenium、playwright),模拟浏览器完整加载页面后再解析内容 - 直接拼接目标URL:IMDB剧集页面格式固定,可通过主页面ID(tt0068112)直接拼接出
https://www.imdb.com/title/tt0068112/episodes?ref_=tt_eps_sm,无需从页面提取
内容的提问来源于stack exchange,提问作者Enrico Caria
相关产品推荐
相关产品推荐

