如何用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
相关产品推荐
相关产品推荐

