当然可以!下面是一个完整实用的图片爬虫案例,适合初学者边学边练。我们将从目标网站中提取图片,并保存到本地。


🕸️ 爬虫案例:手把手教你爬取网页图片

🧩 目标

从指定网页中爬取所有图片,并下载保存到本地。


✅ 技术栈

  • 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}')

🎯 示例目标网站推荐(练习用):


🔧 常见增强功能

功能技术
多页抓取构造分页 URL 循环
多线程下载concurrent.futures.ThreadPoolExecutor
动态加载支持使用 selenium
下载进度条tqdm
异步爬虫aiohttp + asyncio

🚨 防踩坑建议

  • 某些网站图片使用 lazy-load,需要抓 data-src
  • 图片 URL 没有扩展名时,强制保存为 .jpg
  • 网站禁止爬虫的页面,可以查看 robots.txt 或加 headers