当然可以!以下是Python抓取网站图片的基础教程,适合初学者一步步学习如何用爬虫抓取网页上的图片。
🐍 Python爬虫抓图教程:从零开始抓取网页图片
📦 第一步:准备工作
确保安装了以下库:
pip install requests beautifulsoup4
🔍 第二步:完整代码讲解
import os
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
# 要爬取的网页地址
url = 'https://example.com/' # ← 修改为你想抓取图片的网页
# 创建本地文件夹保存图片
folder = 'downloaded_images'
os.makedirs(folder, exist_ok=True)
# 设置请求头,伪装成浏览器
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
}
# 发起网页请求
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 找到所有图片标签
img_tags = soup.find_all('img')
# 遍历所有图片链接
for i, img in enumerate(img_tags):
img_url = img.get('src')
if not img_url:
continue
# 拼接完整图片链接
img_url = urljoin(url, img_url)
# 过滤掉非图片格式
if not img_url.lower().endswith(('.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp')):
continue
try:
# 获取图片数据
img_data = requests.get(img_url, headers=headers).content
# 获取文件扩展名
ext = os.path.splitext(img_url)[1]
# 保存图片
filename = f'image_{i}{ext}'
with open(os.path.join(folder, filename), 'wb') as f:
f.write(img_data)
print(f'[✓] 成功下载:{img_url}')
except Exception as e:
print(f'[✗] 下载失败:{img_url},错误:{e}')
💡 第三步:常见问题解决
问题 | 解决方法 |
---|---|
图片显示不全 | 查看是否是懒加载 (data-src , srcset ) |
图片格式不对 | 检查后缀名或手动加.jpg |
被网站屏蔽 | 加请求头,添加 User-Agent |
抓不到原图 | 检查是否有缩略图和原图,尝试修改 URL |
🛠️ 高级玩法(可选)
- 加入
time.sleep(1)
控制频率,防止封IP - 使用
tqdm
显示下载进度条 - 使用
asyncio
+aiohttp
实现多线程高速抓图 - 加入关键词、分页抓取多个页面
- 对接
selenium
处理JS动态加载页面
📚 推荐学习路线
- 熟悉
requests
、BeautifulSoup
的基本用法 - 学习
正则表达式 re
进行图片URL提取 - 学习
Selenium
爬动态网站 - 掌握
Scrapy
构建爬虫项目 - 深入学习反爬机制和绕过策略
如果你有目标网站,我可以帮你定制一段抓图代码;如果你想打包成桌面工具或加上图像分类功能,我也可以带你一步步完成。
你想继续往哪个方向深入?比如:
- 多页抓取?
- 下载高质量原图?
- 动态网页处理?
发表回复