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

