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

使用requests库无法抓取网页剧集对应流媒体播放链接的技术求助

爬虫无法获取流媒体直链的解决方法

问题原因

  • 目标站点的流媒体播放直链没有直接嵌入在详情页的静态HTML代码中,是通过JavaScript动态计算、解密后才挂载到页面播放器上的
  • requests库只能获取页面的初始静态源码,不会执行页面内的JS代码,因此无法直接提取到最终的直链地址

可行解决方案

方案1:解析页面JS变量提取直链(无浏览器依赖,效率高)

大部分同类站点会将加密后的视频地址存放在页面<script>标签的全局变量中,你可以通过正则匹配提取对应变量,再做简单转义处理即可拿到直链,示例代码调整如下:

import requests
import re
from bs4 import BeautifulSoup

link = 'https://anime-hayai.com/880/'

with requests.Session() as s:
    s.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36'
    res = s.get(link)
    soup = BeautifulSoup(res.text,"lxml")
    for item in soup.select("#episode p:has(> span > a) > span > a"):
        episode_link = item.get("href")
        resp = s.get(episode_link)
        # 正则匹配页面内的视频地址变量,可根据实际页面源码调整正则规则
        match_res = re.search(r'video_url:\s*"([^"]+)"', resp.text)
        if match_res:
            raw_url = match_res.group(1)
            # 处理转义字符,比如把\u002F替换为/
            real_url = raw_url.encode('utf-8').decode('unicode_escape')
            print(real_url)

方案2:使用无头浏览器执行JS(兼容性强,无需解密)

如果站点的加密逻辑比较复杂,不想花时间解析JS,可以使用Selenium配合无头Chrome直接获取渲染后的页面元素,示例代码如下:

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

# 初始化无头浏览器配置
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36")
driver = webdriver.Chrome(options=chrome_options)

link = 'https://anime-hayai.com/880/'
with requests.Session() as s:
    s.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36'
    res = s.get(link)
    soup = BeautifulSoup(res.text,"lxml")
    for item in soup.select("#episode p:has(> span > a) > span > a"):
        episode_link = item.get("href")
        driver.get(episode_link)
        # 等待播放器加载完成,可根据网络情况调整等待时长
        time.sleep(1)
        # 提取video标签的src属性,也可以直接执行JS获取全局变量
        video_src = driver.execute_script("return document.querySelector('video').src")
        print(video_src)

driver.quit()

使用方案2前需要安装对应版本的Chrome浏览器和ChromeDriver,依赖安装命令为pip install selenium

注意事项

  • 部分站点会有反爬机制,频繁请求可能会被封IP,可以适当添加请求间隔
  • 若正则匹配不到变量,可以手动打开详情页查看源码,搜索videoplayback或者stream相关关键词定位存储地址的JS位置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:15:03