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

如何使用Python3从仅知基础地址的网站获取m3u8文件?

How to Find and Fetch an m3u8 File from a Base URL Using Python 3

Hey there! No worries about your English—let’s walk through how to track down an m3u8 file when you only have a website’s base URL. Here’s a step-by-step approach:

1. Start with Fetching the Static HTML Content

First, you’ll need to grab the raw HTML of the base page to look for clues about the m3u8 file. We’ll use the requests library for this—if you don’t have it installed, run pip install requests first.

import requests

base_url = "https://your-target-site.com"  # Replace with your actual base URL
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}  # Mimic a real browser to avoid being blocked

try:
    response = requests.get(base_url, headers=headers)
    response.raise_for_status()  # Trigger error if request fails (e.g., 404, 500)
    html_content = response.text
except requests.exceptions.RequestException as e:
    print(f"Failed to fetch the page: {e}")

2. Parse the HTML to Hunt for m3u8 References

Next, we’ll scan the HTML for any hints of an m3u8 link. The beautifulsoup4 library makes parsing easy—install it with pip install beautifulsoup4.

m3u8 files are usually hidden in:

  • <video> or <iframe> tags (as a src attribute)
  • <script> tags (embedded in JavaScript variables)
  • Media-related <link> tags

Here’s how to search for these:

from bs4 import BeautifulSoup
import re

soup = BeautifulSoup(html_content, "html.parser")

# Check video/iframe tags for direct m3u8 links
for tag in soup.find_all(["video", "iframe"]):
    src = tag.get("src")
    if src and ".m3u8" in src:
        # Convert relative URLs to full URLs using the base URL
        full_m3u8_url = requests.compat.urljoin(base_url, src)
        print(f"Found m3u8 link: {full_m3u8_url}")

# Search script tags for m3u8 references (common in dynamic sites)
for script in soup.find_all("script"):
    script_content = script.string
    if script_content:
        # Use regex to extract any URLs ending with .m3u8
        m3u8_matches = re.findall(r'https?://[^\s"]+\.m3u8', script_content)
        for match in m3u8_matches:
            print(f"Found m3u8 link in script: {match}")

If the above steps come up empty, the m3u8 link is likely loaded dynamically via JavaScript (super common in modern streaming sites). For this, you’ll need to simulate a real browser to render the page fully. We’ll use selenium here—install it with pip install selenium, and download the matching browser driver (e.g., ChromeDriver for Chrome) and add it to your system PATH.

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time

# Configure browser to run in background (headless mode)
chrome_options = Options()
chrome_options.add_argument("--headless=new")
driver = webdriver.Chrome(options=chrome_options)

try:
    driver.get(base_url)
    time.sleep(3)  # Give JavaScript time to load content
    page_source = driver.page_source

    # Reuse the parsing logic from step 2 on the rendered page source
    soup = BeautifulSoup(page_source, "html.parser")
    # ... (repeat the video/iframe and script search code here)

finally:
    driver.quit()  # Make sure to close the browser

4. Verify and Save the m3u8 File

Once you have a potential m3u8 URL, you can fetch it to confirm it’s valid and save it locally:

def save_m3u8(m3u8_url):
    try:
        response = requests.get(m3u8_url, headers=headers)
        response.raise_for_status()
        # Check if the content is a valid m3u8 file (starts with #EXTM3U)
        if response.text.startswith("#EXTM3U"):
            with open("output.m3u8", "w", encoding="utf-8") as f:
                f.write(response.text)
            print("Successfully saved the m3u8 file!")
        else:
            print("This URL doesn't point to a valid m3u8 file.")
    except requests.exceptions.RequestException as e:
        print(f"Failed to fetch m3u8: {e}")

# Call the function with your found URL
# save_m3u8(full_m3u8_url)

Important Reminders

  • Always respect the website’s robots.txt and copyright terms—never scrape or download content you don’t have explicit permission to access.
  • Some sites use anti-scraping measures (like CAPTCHAs or IP blocking). If you run into these, adjust your headers or consider proxies, but only if allowed by the site’s rules.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:35:12