网页图片抓取是Python爬虫的常见应用场景之一,下面我会用最常用的 requests + BeautifulSoup
和 urllib
的方法,手把手教你如何抓取网页中的图片。
✅ 基础版:抓取网页中的图片并保存
所需库:
pip install requests beautifulsoup4
示例代码:
import os
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
# 目标网页
url = 'https://example.com' # 替换为目标网站
# 创建保存图片的文件夹
folder = 'images'
os.makedirs(folder, exist_ok=True)
# 请求网页
headers = {
'User-Agent': 'Mozilla/5.0'
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 找到所有图片标签
img_tags = soup.find_all('img')
# 遍历并下载图片
for idx, img in enumerate(img_tags):
img_url = img.get('src')
if not img_url:
continue
# 处理相对路径
img_url = urljoin(url, img_url)
try:
img_data = requests.get(img_url, headers=headers).content
img_ext = os.path.splitext(img_url)[-1][:5] # 获取文件扩展名
img_name = f'image_{idx}{img_ext if img_ext else ".jpg"}'
with open(os.path.join(folder, img_name), 'wb') as f:
f.write(img_data)
print(f'[+] 下载成功: {img_url}')
except Exception as e:
print(f'[!] 下载失败: {img_url},原因: {e}')
🧠 补充技巧:
1. 过滤掉一些无效图片:
if not img_url.endswith(('.jpg', '.jpeg', '.png', '.gif')):
continue
2. 下载更大尺寸(有的网站有缩略图和原图之分):
可以检查 data-src
、srcset
、lazy-src
等属性:
img_url = img.get('data-src') or img.get('src')
🔒 注意事项:
- 网站是否允许爬虫?查看网站的
robots.txt
。 - 图片版权是否合法使用?
- 防止被封:添加请求头,控制请求频率(可用
time.sleep()
)。 - 复杂网站可能需要
selenium
动态加载。
想继续深入?
我可以为你生成:
- 指定关键词图片爬虫(如 Google/Bing 图搜)
- 多线程/异步爬取加速版
- 带 GUI 的图片爬虫工具
- 支持自动分类图片的智能爬虫
你更倾向于哪种?
发表回复