'commit'
This commit is contained in:
102
DouYin/batch_download.py
Normal file
102
DouYin/batch_download.py
Normal file
@@ -0,0 +1,102 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import os
|
||||
import time
|
||||
import re
|
||||
from VideoDownloader import VideoDownloader
|
||||
|
||||
def main():
|
||||
url_file = r"d:\dsWork\aiData\DouYin\Url.txt"
|
||||
save_dir = r"d:\dsWork\aiData\DouYin\DownloadedVideos"
|
||||
|
||||
if not os.path.exists(url_file):
|
||||
print(f"Error: File not found: {url_file}")
|
||||
return
|
||||
|
||||
if not os.path.exists(save_dir):
|
||||
os.makedirs(save_dir)
|
||||
|
||||
with VideoDownloader() as downloader:
|
||||
with open(url_file, 'r', encoding='utf-8') as f:
|
||||
lines = f.readlines()
|
||||
|
||||
print(f"Found {len(lines)} lines in {url_file}")
|
||||
|
||||
count = 0
|
||||
failed_urls = []
|
||||
|
||||
# Log to file
|
||||
log_file = open(os.path.join(save_dir, "batch_log.txt"), "a", encoding="utf-8")
|
||||
log_file.write(f"\n--- Batch Download Started at {time.strftime('%Y-%m-%d %H:%M:%S')} ---\n")
|
||||
|
||||
try:
|
||||
for i, line in enumerate(lines):
|
||||
line = line.strip()
|
||||
if not line:
|
||||
continue
|
||||
|
||||
msg = f"[{i+1}/{len(lines)}] Processing line..."
|
||||
print(msg)
|
||||
log_file.write(msg + "\n")
|
||||
log_file.flush()
|
||||
|
||||
# Extract URL using regex (matches https://v.douyin.com/...)
|
||||
match = re.search(r'https?://v\.douyin\.com/[a-zA-Z0-9\-_]+/?', line)
|
||||
if match:
|
||||
url = match.group(0)
|
||||
msg = f" Found URL: {url}"
|
||||
print(msg)
|
||||
log_file.write(msg + "\n")
|
||||
log_file.flush()
|
||||
|
||||
success = False
|
||||
# Retry logic
|
||||
for attempt in range(3):
|
||||
try:
|
||||
success = downloader.download(url, save_dir)
|
||||
if success:
|
||||
break
|
||||
msg = f" Attempt {attempt+1} failed. Retrying in 2s..."
|
||||
print(msg)
|
||||
log_file.write(msg + "\n")
|
||||
log_file.flush()
|
||||
time.sleep(2)
|
||||
except Exception as e:
|
||||
msg = f" Error on attempt {attempt+1}: {e}"
|
||||
print(msg)
|
||||
log_file.write(msg + "\n")
|
||||
log_file.flush()
|
||||
time.sleep(2)
|
||||
|
||||
if success:
|
||||
count += 1
|
||||
log_file.write(f" SUCCESS: {url}\n")
|
||||
else:
|
||||
msg = f" FAILED to download: {url}"
|
||||
print(msg)
|
||||
failed_urls.append(url)
|
||||
log_file.write(msg + "\n")
|
||||
|
||||
# Sleep to be nice
|
||||
time.sleep(1)
|
||||
else:
|
||||
msg = f" No valid URL found in line: {line[:50]}..."
|
||||
print(msg)
|
||||
log_file.write(msg + "\n")
|
||||
except Exception as e:
|
||||
msg = f"CRITICAL ERROR in batch loop: {e}"
|
||||
print(msg)
|
||||
log_file.write(msg + "\n")
|
||||
finally:
|
||||
log_file.write(f"--- Batch Download Ended at {time.strftime('%Y-%m-%d %H:%M:%S')} ---\n")
|
||||
log_file.close()
|
||||
|
||||
print(f"Batch download completed. Successfully downloaded {count} videos.")
|
||||
if failed_urls:
|
||||
print(f"Failed to download {len(failed_urls)} videos:")
|
||||
for u in failed_urls:
|
||||
print(f" {u}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user