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

如何用Python Selenium通用提取Box Office Mojo页面的电影类型字段

通用批量提取方案

核心优化逻辑

你之前使用的绝对XPath依赖页面元素的固定层级位置,不同电影页面的Genres字段所在层级可能存在差异,因此我们基于字段的文本特征和固定DOM关联关系编写相对XPath,可适配所有页面:
根据你给出的DOM结构,Genres标题span的父div的下一个同级span就是类型值存储节点,我们直接用这个关联关系定位,完全不依赖页面层级位置。

可直接运行的批量代码

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

# 初始化驱动
driver = webdriver.Chrome("C:\SeleniumDrivers\chromedriver.exe")
# 全局隐式等待
driver.implicitly_wait(3)

# 把你所有要爬的电影页面链接放到这个列表里
movie_urls = [
    "https://www.boxofficemojo.com/release/rl3829564929/",
    # 在此处追加其他电影链接
]

# 存储最终提取结果
genres_result = {}

for url in movie_urls:
    driver.get(url)
    try:
        # 通用XPath定位,适配所有符合DOM结构的页面
        genre_ele = WebDriverWait(driver, 5).until(
            EC.presence_of_element_located((By.XPATH, "//span[text()='Genres']/parent::div/following-sibling::span[1]"))
        )
        genres_result[url] = genre_ele.text.strip()
    except Exception as e:
        # 提取失败的链接单独标记,不会中断整体爬取流程
        genres_result[url] = "提取失败"
        print(f"链接{url}类型提取失败:{str(e)}")

driver.quit()
# 输出所有提取结果
print(genres_result)

额外说明

  • 核心定位逻辑先通过//span[text()='Genres']定位到Genres标题节点,再向上找父div,最后匹配紧跟的第一个同级span,只要页面DOM结构符合你给出的规则就可以通用
  • 加入显式等待+异常捕获逻辑,避免个别页面加载慢、结构异常导致整个爬取任务中断
  • 最终结果以字典形式存储,键为电影页面链接,值为对应的类型字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:57:05