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

如何使用Python抓取JustWatch页面中未在元素检查器中显示的IMDB链接

如何使用Python抓取JustWatch页面中未在元素检查器中显示的IMDB链接

嘿,我来帮你搞定这个问题!你遇到的情况太常见啦——很多现代网站(比如JustWatch)不会把这类关联链接直接写在HTML元素的属性里,而是把数据藏在页面的内嵌JSON结构中,通过JavaScript触发跳转,所以你在元素检查器里看不到链接,但点击的时候能正常跳转。

你现在的代码只能拿到评分,是因为你在解析渲染后的HTML元素,但IMDB链接其实早就藏在页面的源代码里了,只是没直接暴露在元素属性中。下面给你两种靠谱的解决方法,优先推荐第一种,更高效:

方法一:解析页面内嵌的JSON数据(推荐)

JustWatch是用Next.js构建的网站,所有页面核心数据都会放在一个ID为__NEXT_DATA__的script标签里,里面包含了影片的所有外部平台链接,包括IMDB。我们只需要找到这个脚本,解析JSON就能拿到链接:

from urllib.request import Request, urlopen
import json
from bs4 import BeautifulSoup

url = "https://www.justwatch.com/in/movie/oppenheimer"
req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
webpage = urlopen(req).read()
soup = BeautifulSoup(webpage, 'html.parser')

# 定位存储页面核心数据的script标签
next_data_script = soup.find('script', id='__NEXT_DATA__')
if next_data_script:
    # 解析JSON格式的内容
    page_data = json.loads(next_data_script.string)
    # 从数据结构中提取影片的外部ID信息
    movie_info = page_data['props']['pageProps']['title']
    imdb_id_or_link = movie_info.get('externalIds', {}).get('imdb')
    
    if imdb_id_or_link:
        # 处理两种情况:可能是纯ID,也可能是完整链接
        if not imdb_id_or_link.startswith('http'):
            imdb_full_link = f"https://www.imdb.com/title/{imdb_id_or_link}/?ref_=justwatch"
        else:
            imdb_full_link = imdb_id_or_link
        print("抓取到的IMDB链接:", imdb_full_link)
    else:
        print("没有找到对应的IMDB链接")
else:
    print("未找到页面数据脚本,请检查页面结构是否有变化")

方法二:用Selenium模拟浏览器点击(备选)

如果你不想解析JSON,也可以用Selenium模拟真实浏览器的操作,触发点击事件后获取跳转链接。这种方法需要安装Selenium和对应浏览器的驱动,相对重一些,但更贴近用户真实操作:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

url = "https://www.justwatch.com/in/movie/oppenheimer"
driver = webdriver.Chrome()  # 需要提前安装对应浏览器的驱动
driver.get(url)

try:
    # 等待IMDB图标加载完成并触发点击
    imdb_icon = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, "a[aria-label='IMDb']"))
    )
    # 用回车模拟点击,在新标签页打开链接
    imdb_icon.send_keys('\n')
    # 切换到新标签页并获取链接
    driver.switch_to.window(driver.window_handles[1])
    imdb_link = driver.current_url
    print("抓取到的IMDB链接:", imdb_link)
finally:
    driver.quit()

为什么元素检查器里看不到链接?

因为JustWatch的IMDB图标点击事件是通过JavaScript绑定的,跳转链接是从页面的后端数据中动态获取的,并没有直接写在<a>标签的href属性里,所以你在元素检查器里看不到,但页面源代码里的JSON数据已经包含了这个链接。

备注:内容来源于stack exchange,提问作者user23178403

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 13:04:44