You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

网页爬取时获取椭圆符号隐藏的动态剧集标题数据的问题

网页爬取时获取椭圆符号隐藏的动态剧集标题数据的问题

我明白你现在的困扰——想用代码自动获取网页上的剧集标题,但不管是用requests直接请求还是Selenium,都拿不到<h1 id="epName">里的实际内容,只看到空标签对吧?这是因为这个标题是JavaScript动态填充的,页面初始加载时只是个空壳,等JS执行完才会把标题内容放进去。

先帮你梳理下之前尝试里的问题:

  • requests的话,只能拿到服务器返回的初始HTML,那些需要JS渲染的动态内容自然拿不到,所以你看到的是空的<h1>标签。
  • 你用Selenium的时候,问题大概率出在没等页面完全加载完成就获取源码,而且手动调用changeEp函数其实没必要——页面的onload="initPage()"已经触发了初始化逻辑,只是你的代码跑得太快,JS还没来得及填充标题内容。

下面给你两个可行的解决方案:

方案一:优化Selenium代码,等待动态内容加载

你需要让Selenium等待标题元素加载完成,而不是急着拿page_source。可以用WebDriverWait来等待元素的文本不为空,确保拿到正确的标题。

修正后的代码示例:

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

# 初始化浏览器(这里用Safari,你也可以换成Chrome等)
driver = webdriver.Safari()
url = "https://g1.heartshine.gay/?s=1&e=46&res=480"
driver.get(url)

# 等待h1元素的文本不为空,最多等10秒
try:
    # 等待标题元素可见且文本非空
    WebDriverWait(driver, 10).until(
        EC.text_to_be_present_in_element((By.ID, "epName"), "") == False
    )
    # 直接获取元素的文本内容
    ep_title = driver.find_element(By.ID, "epName").text
    print("剧集标题:", ep_title)
finally:
    driver.quit()

解释下关键点:

  • WebDriverWait会一直等待到满足条件(这里是h1的文本不再为空),最多等10秒,避免因网络慢或JS执行慢导致拿不到内容。
  • 不要直接打印page_source,因为它可能还是初始的HTML内容,直接获取元素的.text属性才能拿到动态渲染后的标题。

方案二:直接调用后端API(更高效)

如果不想用Selenium(毕竟启动浏览器比较慢),可以直接找页面获取标题的后端接口。你可以打开浏览器的开发者工具(F12),切换到网络面板,刷新页面,看看有没有XHR/Fetch请求是用来获取剧集信息的。

一般来说,页面会发送一个请求到某个API接口,带上s(季数)和e(集数)参数,返回包含标题的JSON数据。找到这个接口后,直接用requests调用就能拿到标题,不用渲染整个页面。

举个模拟的例子(你需要替换成实际找到的接口地址):

import requests

# 替换成你实际找到的API接口地址
api_url = "https://g1.heartshine.gay/api/get-episode-info"
params = {
    "s": 1,
    "e": 46
}

response = requests.get(api_url, params=params)
if response.status_code == 200:
    episode_data = response.json()
    ep_title = episode_data.get("title")
    print("剧集标题:", ep_title)

最后提醒下:注意网站的反爬规则,不要频繁请求给服务器造成压力;如果API接口需要特定的请求头或者Cookie,记得在requests里加上对应内容。

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

火山引擎 最新活动