使用 Python 下载网页中的视频和音频:requests 库与 Selenium 库的对比

本文将讨论使用 Python 的 requests 库和 Selenium 库下载网页中的视频和音频文件的区别,以及如何使用 Selenium 处理动态加载的网页内容。

问题分析

假设你想要使用 Python 下载某个网页中的视频和音频文件,你可能会首先想到使用 requests 库获取网页的 HTML 内容,并使用 BeautifulSoup 库解析 HTML,找到视频和音频的链接,然后使用 requests 库下载这些文件。

然而,如果你尝试使用以下代码来下载网页 https://www.1819ys.com/movie/45620-0-0.html 中的视频和音频,你可能会发现运行结果并没有下载任何文件。

import requests
from bs4 import BeautifulSoup

# 定义目标网页的URL
url = 'https://www.1819ys.com/movie/45620-0-0.html'

# 发起HTTP请求
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36 Edg/99.0.1150.55'
}
response = requests.get(url=url, headers=headers)

# 解析网页内容
soup = BeautifulSoup(response.text, 'html.parser')

# 找到所有视频和音频的链接
video_links = soup.select('a[href$='.mp4']')
audio_links = soup.select('a[href$='.mp3']')

# 下载视频和音频文件
for link in video_links:
    video_url = link['href']
    video_title = link.text
    video_response = requests.get(video_url)
    with open(f'{video_title}.mp4', 'wb') as f:
        f.write(video_response.content)

for link in audio_links:
    audio_url = link['href']
    audio_title = link.text
    audio_response = requests.get(audio_url)
    with open(f'{audio_title}.mp3', 'wb') as f:
        f.write(audio_response.content)

上述代码没有下载视频和音频的原因是网页中的视频和音频链接可能是通过 JavaScript 动态加载的,而 requests 库只能获取静态的 HTML 内容,无法执行 JavaScript。

使用 Selenium 库解决问题

如果要下载动态加载的视频和音频文件,可以使用 Selenium 库来模拟浏览器的行为,从而获取到完整的页面内容,包括动态加载的视频和音频链接。

以下是如何使用 Selenium 库修改后的代码示例:

import time
from selenium import webdriver

# 定义目标网页的URL
url = 'https://www.1819ys.com/movie/45620-0-0.html'

# 使用Selenium打开网页
driver = webdriver.Chrome('path/to/chromedriver')  # 需要提前下载并指定chromedriver的路径
driver.get(url)

# 等待网页加载完成
time.sleep(5)

# 解析网页内容
soup = BeautifulSoup(driver.page_source, 'html.parser')

# 找到所有视频和音频的链接
video_links = soup.select('a[href$='.mp4']')
audio_links = soup.select('a[href$='.mp3']')

# 下载视频和音频文件
for link in video_links:
    video_url = link['href']
    video_title = link.text
    video_response = requests.get(video_url)
    with open(f'{video_title}.mp4', 'wb') as f:
        f.write(video_response.content)

for link in audio_links:
    audio_url = link['href']
    audio_title = link.text
    audio_response = requests.get(audio_url)
    with open(f'{audio_title}.mp3', 'wb') as f:
        f.write(audio_response.content)

# 关闭浏览器
driver.quit()

注意:

  • 上述代码需要安装 Selenium 库和 Chrome 浏览器,并下载对应版本的 chromedriver 驱动程序。在代码中需要指定 chromedriver 的路径。
  • 为了确保网页加载完成,使用了 time.sleep(5) 来等待 5 秒钟,可以根据实际情况进行调整。

通过使用 Selenium 库,我们可以模拟浏览器行为,获取到完整的网页内容,从而成功下载动态加载的视频和音频文件。


原文地址: https://www.cveoy.top/t/topic/fQ7h 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录