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

如何用Python+Beautiful Soup获取HTML中动态加载的不可见元素内容

问题原因

你拿到的源码和浏览器不一致是因为剧集列表属于页面加载完成后通过JS动态请求渲染的内容,requests 仅能获取初始的静态HTML源码,不会执行页面内置的JS逻辑,因此动态生成的DOM元素不会出现在你拿到的源码中。

解决方案

方案1:直接调用剧集加载接口(推荐,效率更高)

该网站的剧集列表通过独立的AJAX接口返回,你只需要先从原始静态页提取必要参数,直接请求该接口即可拿到完整的剧集数据,无需模拟浏览器运行。
示例代码如下:

from bs4 import BeautifulSoup
import requests as rq

# 请求初始分类页
base_page = rq.get("https://gogoanime.pe/category/boruto-naruto-next-generations")
base_soup = BeautifulSoup(base_page.text, "html.parser")

# 提取页面内置的动画ID参数
movie_id = base_soup.find("input", id="movie_id")["value"]

# 请求剧集列表接口,ep_start和ep_end可以按需调整,设置跨度足够大即可拿到全量剧集
ep_api = f"https://gogoanime.pe/ajax/load-list-episode?ep_start=0&ep_end=9999&id={movie_id}"
ep_content = rq.get(ep_api).text
ep_soup = BeautifulSoup(ep_content, "html.parser")

# 提取所有剧集的编号和链接
episode_list = []
for li in ep_soup.find_all("li"):
    ep_url = "https://gogoanime.pe" + li.a["href"].strip()
    ep_num = li.find("div", class_="name").get_text(strip=True).replace("EP ", "")
    episode_list.append({"num": ep_num, "url": ep_url})

# 输出结果
for ep in episode_list:
    print(f"EP {ep['num']}: {ep['url']}")

方案2:使用无头浏览器渲染完整页面(通用性更强)

如果不想手动找接口,可以用Selenium、Playwright这类工具模拟浏览器运行,执行完页面JS后再提取完整DOM,适配所有动态渲染场景。
以Selenium为例,示例代码如下:

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# 配置无头模式,不弹出浏览器窗口
chrome_opt = Options()
chrome_opt.add_argument("--headless=new")
chrome_opt.add_argument("--disable-gpu")

driver = webdriver.Chrome(options=chrome_opt)
driver.get("https://gogoanime.pe/category/boruto-naruto-next-generations")
# 等待动态内容加载完成
driver.implicitly_wait(5)

# 拿到渲染后的完整源码
full_html = driver.page_source
driver.quit()

# 用BeautifulSoup解析即可拿到目标元素
soup = BeautifulSoup(full_html, "html.parser")
ep_ul = soup.find("ul", id="episode_related")
for li in ep_ul.find_all("li"):
    ep_url = "https://gogoanime.pe" + li.a["href"].strip()
    ep_num = li.find("div", class_="name").get_text(strip=True).replace("EP ", "")
    print(f"EP {ep_num}: {ep_url}")

使用该方案需要提前安装Selenium库,以及对应版本的Chrome浏览器驱动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:15:01