123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- """
- 下载视频
- """
- import os
- import json
- import time
- import asyncio
- from hashlib import md5
- import datetime
- import httpx
- import requests
- class VideoDownloader(object):
- """
- 视频下载功能
- """
- def __init__(self, video_obj):
- self.platform = video_obj['platform']
- self.video_id = video_obj['video_id']
- self.video_url = video_obj['video_url']
- self.cover_url = video_obj['cover_url']
- self.proxy = {
- "http://": "http://t17772369458618:5zqcjkmy@q796.kdltps.com:15818/",
- "https://": "http://t17772369458618:5zqcjkmy@q796.kdltps.com:15818/"
- }
- self.max_retry = 5
- def generate_video_path(self):
- """
- 通过视频信息生成唯一视频地址
- :return:
- """
- index = "{}-{}".format(self.platform, self.video_id)
- index = md5(index.encode()).hexdigest()
- temp_dir = "/Users/luojunhui/cyber/automatic_crawler"
- file_name = "{}.mp4".format(index)
- date_info = datetime.datetime.today().strftime("%Y%m%d")
- video_path = os.path.join(temp_dir, date_info, file_name)
- if os.path.exists(video_path):
- return
- else:
- os.makedirs(os.path.dirname(video_path), exist_ok=True)
- return video_path
- async def download_video(self):
- """
- download video from the web
- :return:
- """
- if self.platform == "fuqiwang":
- download_path = self.generate_video_path()
- if download_path:
- headers = {
- 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/6.8.0(0x16080000) NetType/WIFI MiniProgramEnv/Mac MacWechat/WMPF MacWechat/3.8.6(0x13080610) XWEB/1156',
- 'Accept-Encoding': 'identity;q=1, *;q=0',
- 'Accept': '*/*',
- 'Sec-Fetch-Site': 'cross-site',
- 'Sec-Fetch-Mode': 'no-cors',
- 'Sec-Fetch-Dest': 'video',
- 'Referer': 'https://servicewechat.com/wxa1431c6e7acdd32d/2/page-frame.html',
- 'Accept-Language': 'en-US,en;q=0.9',
- 'Range': 'bytes=0-',
- }
- async with httpx.AsyncClient(http2=True, proxies=self.proxy, headers=headers) as client:
- try:
- response = await client.get(self.video_url, headers=headers)
- if response.status_code == 206:
- with open(download_path, "wb") as f:
- f.write(response.content)
- else:
- for _ in range(self.max_retry):
- response = await client.get(self.video_url, headers=headers, follow_redirects=True)
- if response.status_code == 206:
- with open(download_path, "wb") as f:
- f.write(response.content)
- break
- except httpx.HTTPError as e:
- print(f"An error occurred while downloading: {e}")
- else:
- print("视频已经存在")
- def get_by_request(self):
- """
- req
- :return:
- """
- download_path = self.generate_video_path()
- headers = {
- 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/6.8.0(0x16080000) NetType/WIFI MiniProgramEnv/Mac MacWechat/WMPF MacWechat/3.8.6(0x13080610) XWEB/1156',
- 'Accept-Encoding': 'identity;q=1, *;q=0',
- 'Accept': '*/*',
- 'Sec-Fetch-Site': 'cross-site',
- 'Sec-Fetch-Mode': 'no-cors',
- 'Sec-Fetch-Dest': 'video',
- 'Referer': 'https://servicewechat.com/wxa1431c6e7acdd32d/2/page-frame.html',
- 'Accept-Language': 'en-US,en;q=0.9',
- 'Range': 'bytes=0-',
- }
- r = requests.get(
- url=self.video_url,
- headers=headers,
- proxies=self.proxy
- )
- print(r.status_code)
- with open("test.mp4", "wb") as f:
- f.write(r.content)
- async def main(video_obj):
- """
- 异步执行函数
- :param video_obj:
- :return:
- """
- downloader = VideoDownloader(video_obj)
- await downloader.download_video()
- if __name__ == '__main__':
- video_o = {
- "update_time": 1709784300,
- "platform": "fuqiwang",
- "video_id": 142599,
- "title": "🔴3·8妇女节,最美的祝福,送给全天下的女神!",
- "type": 1,
- "video_type": 2,
- "cover_url": "https://znl-video-bos.cdn.bcebos.com/c6f12b49992ef638342065439f55b444/65e93632/picture/20240306/b8b0c1cc262c2394f111650c9f82e35a_thumb.jpg",
- "video_url": "https://znl-video-bos.cdn.bcebos.com/e368801a814c548e443835086d37caaf/65e93632/video/20240306/820ee1498e3ed2a59d37aed54d39ae95_1.mp4",
- }
- VideoDownloader(video_obj=video_o).get_by_request()
- # asyncio.run(main(video_obj=video_o))
|