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

如何用BeautifulSoup提取div内h3标签文本?提取100) Reservoir Dogs失败

解决方法

问题原因

  • 目标网站的电影列表是通过JavaScript动态渲染的,requests只能获取到初始的静态HTML,无法获取JS加载后的内容,所以找不到目标元素。
  • 代码中使用的jsx-4245974604是React生成的动态类名,类名可能会随页面更新或请求变化,无法稳定定位元素。

方案一:使用Selenium获取动态内容

Selenium可以模拟浏览器打开页面,等待JS渲染完成后再提取内容。

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.empireonline.com/movies/features/best-movies-2/"

# 初始化Chrome浏览器(需提前下载对应版本的ChromeDriver)
driver = webdriver.Chrome()
driver.get(url)

# 等待目标元素加载完成,最多等待10秒
try:
    # 通过文本内容定位元素,避免依赖动态类名
    target_movie = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//h3[contains(text(), '100) Reservoir Dogs')]"))
    )
    print(target_movie.text)
finally:
    driver.quit()

方案二:直接请求API接口(更高效)

打开浏览器开发者工具的「网络」面板,刷新页面后筛选XHR/fetch请求,可找到返回电影列表的API接口,直接请求接口获取数据,无需处理页面渲染。

示例(需自行查找实际API接口):

import requests

# 替换为实际找到的API接口URL
api_url = "目标网站的电影列表API接口"
response = requests.get(api_url)
movie_data = response.json()

# 遍历数据找到目标电影
for item in movie_data:
    if "100) Reservoir Dogs" in item.get("title", ""):
        print(item["title"])
        break

注意事项

  • 使用Selenium时,需确保浏览器驱动版本与本地浏览器版本匹配。
  • 动态生成的类名不适合作为定位元素的依据,优先使用文本、固定属性或XPath表达式定位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:35:14