Python批量下载网页图片脚本

代码脚本 · 其他

输入网页URL,自动下载页面上所有图片,支持按类型筛选、自定义保存目录、跳过已下载。

详细内容

#!/usr/bin/env python3 # Python批量下载网页图片脚本 # 依赖: pip install requests beautifulsoup4 # 使用方法: python3 download_images.py https://example.com import os import sys import hashlib import requests from bs4 import BeautifulSoup from urllib.parse import urljoin, urlparse def download_images(url, save_dir='downloaded_images'): """下载网页上的所有图片""" # 创建保存目录 os.makedirs(save_dir, exist_ok=True) # 请求网页 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' } try: response = requests.get(url, headers=headers, timeout=15) response.raise_for_status() except Exception as e: print(f'❌ 获取网页失败: {e}') return # 解析图片 soup = BeautifulSoup(response.text, 'html.parser') img_tags = soup.find_all('img') print(f'找到 {len(img_tags)} 个图片标签') print(f'保存目录: {save_dir}') print('-' * 50) success = 0 failed = 0 skipped = 0 for i, img in enumerate(img_tags, 1): # 获取图片URL(支持src和data-src懒加载) img_url = img.get('src') or img.get('data-src') or img.get('data-original') if not img_url: continue # 转为绝对URL img_url = urljoin(url, img_url) # 跳过非http链接 if not img_url.startswith('http'): continue # 获取文件扩展名 ext = os.path.splitext(urlparse(img_url).path)[1].lower() if ext not in ['.jpg', '.jpeg', '.png', '.gif', '.webp', '.bmp']: ext = '.jpg' # 默认jpg # 用URL哈希作为文件名避免重复 filename = hashlib.md5(img_url.encode()).hexdigest()[:12] + ext filepath = os.path.join(save_dir, filename) # 跳过已下载 if os.path.exists(filepath): print(f' [{i}/{len(img_tags)}] ⏭️ 跳过(已存在): {img_url[:60]}...') skipped += 1 continue # 下载图片 try: img_response = requests.get(img_url, headers=headers, timeout=10) img_response.raise_for_status() with open(filepath, 'wb') as f: f.write(img_response.content) size = len(img_response.content) / 1024 print(f' [{i}/{len(img_tags)}] ✅ 下载成功: {filename} ({size:.1f}KB)') success += 1 except Exception as e: print(f' [{i}/{len(img_tags)}] ❌ 下载失败: {img_url[:60]}...') failed += 1 print('-' * 50) print(f'完成!成功: {success}, 失败: {failed}, 跳过: {skipped}') if __name__ == '__main__': if len(sys.argv) < 2: print('使用方法: python3 download_images.py <网页URL> [保存目录]') print('示例: python3 download_images.py https://example.com ./images') sys.exit(1) url = sys.argv[1] save_dir = sys.argv[2] if len(sys.argv) > 2 else 'downloaded_images' download_images(url, save_dir)
Python图片下载爬虫批量网页

更多其他