python+request 哔哩哔哩视频下载

实现功能为输入视频av号,完成下载。

随便点击一个视频进入,打开调试器观察。

发现有一个内容较大的fetch文件

打开该网址,会发现视频自动下载到电脑中。可见,可以通过该网址完成bilibili的视频下载。

而该网址,也可在网站的html中找到:

利用正则可将其匹配出来。

r'"url":"http(.+?)","backup_url":.+?'

所以完整的py文件如下:

import requests
import re
aid = input('请输入av号:')
# 获取bilibili视频地址
url = 'https://www.bilibili.com/video/av'+aid
headers = {'Host': 'www.bilibili.com',
           'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (
### 使用 Python 实现爬取视频功能 要通过 Python 爬取视频的数据并完成下载,可以按照以下方法操作。此过程涉及多个技术细节,包括网络请求头设置、分块下载以及处理 API 数据。 #### 设置 User-Agent 和 Headers 为了模拟浏览器行为并向服务器发送合法的请求,需要配置合适的 `User-Agent` 和其他必要的头部字段。通常情况下,Bilibili 的反爬机制较为严格,因此建议使用常见的浏览器标识字符串来伪装请求源[^3]。 ```python import requests headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 ' '(KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36', } ``` #### 获取目标资源 URL 在实际应用中,可以通过分析 Bilibili 提供的接口或者页面加载逻辑找到对应的音视频流地址。这些地址可能隐藏于 HTML 或者 JSON 响应之中,需借助开发者工具定位具体路径[^2]。 假设已经获得了有效的视频片段链接,则可以直接进入下一步骤;如果尚未取得确切URL,请先解析网页结构提取所需参数后再构建最终访问链路。 #### 下载大文件采用 Range 请求方式 对于较大尺寸的多媒体文件来说,一次性全部传输可能会遇到内存不足等问题,推荐利用 HTTP 协议中的 range 字段支持断点续传特性来进行逐步抓取[^1]。 以下是基于前面提到的方法实现的一个简单示例: ```python def download_large_file(url, file_path, chunk_size=8192): """ Download large files using ranged GET request. :param url: The target resource's URL string. :param file_path: Local storage path where the content will be saved into. :param chunk_size: Size of each block when reading data from network stream. """ total_received_bytes = 0 try: with open(file_path, "wb") as f_out: while True: custom_header = {'Range':f"bytes={total_received_bytes}-", **headers} resp = requests.get(url, headers=custom_header, stream=True) if not resp.ok or ('Content-Length' not in resp.headers): break expected_length=int(resp.headers["Content-Length"]) for byte_block in resp.iter_content(chunk_size=chunk_size): actual_len=len(byte_block) if actual_len==0:break f_out.write(byte_block) total_received_bytes+=actual_len del resp return {"status":"success","message":f"{file_path} has been downloaded successfully."} except Exception as e: error_msg=str(e) return {"status":"failure","error_message":error_msg} video_url="https://example.com/path/to/video" output_filename="./my_downloaded_video.mp4" result=download_large_file(video_url,output_filename) if result['status']=="success": print(result['message']) else: print(f"An error occurred during downloading:{result['error_message']}") ``` 以上脚本定义了一个函数用于执行带有范围指定选项的大规模资料获取作业,并且能够妥善应对中途可能出现的各种异常状况。 ---
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值