当然可以!下面是一个完整实用的图片爬虫案例,适合初学者边学边练。我们将从目标网站中提取图片,并保存到本地。
🕸️ 爬虫案例:手把手教你爬取网页图片
🧩 目标
从指定网页中爬取所有图片,并下载保存到本地。
✅ 技术栈
requests
:发起网页请求BeautifulSoup
:解析HTML,提取图片地址os
+urllib.parse
:文件保存 & URL拼接
📦 安装依赖
pip install requests beautifulsoup4
📄 实战代码
import os
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
# 要爬取的网页(替换为你感兴趣的页面)
url = 'https://www.example.com'
# 设置请求头,伪装成浏览器防止被拦截
headers = {
'User-Agent': 'Mozilla/5.0'
}
# 创建本地保存图片的目录
save_dir = 'downloaded_images'
os.makedirs(save_dir, exist_ok=True)
# 获取网页内容
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):
# 优先尝试 data-src、srcset
img_url = img.get('data-src') or img.get('src') or img.get('srcset')
if not img_url:
continue
# 有些 srcset 有多个 URL,取第一个
img_url = img_url.split()[0]
full_url = urljoin(url, img_url)
# 尝试下载图片
try:
img_data = requests.get(full_url, headers=headers).content
ext = os.path.splitext(full_url)[-1]
if not ext or len(ext) > 5:
ext = '.jpg'
file_path = os.path.join(save_dir, f'image_{idx}{ext}')
with open(file_path, 'wb') as f:
f.write(img_data)
print(f'[✓] 成功下载:{full_url}')
except Exception as e:
print(f'[✗] 下载失败:{full_url},原因:{e}')
🎯 示例目标网站推荐(练习用):
- https://unsplash.com(需要处理 JS 动态加载,适合进阶)
- http://books.toscrape.com(可直接抓图)
- https://pic.netbian.com(风景图,适合练手)
🔧 常见增强功能
功能 | 技术 |
---|---|
多页抓取 | 构造分页 URL 循环 |
多线程下载 | concurrent.futures.ThreadPoolExecutor |
动态加载支持 | 使用 selenium |
下载进度条 | tqdm |
异步爬虫 | aiohttp + asyncio |
🚨 防踩坑建议
- 某些网站图片使用
lazy-load
,需要抓data-src
- 图片 URL 没有扩展名时,强制保存为
.jpg
- 网站禁止爬虫的页面,可以查看 robots.txt 或加
headers
发表回复