| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 | """下载视频"""import osimport jsonimport timeimport asynciofrom hashlib import md5import datetimeimport httpximport requestsclass 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))
 |