网页图片抓取是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-srcsrcsetlazy-src 等属性:

img_url = img.get('data-src') or img.get('src')

🔒 注意事项:

  • 网站是否允许爬虫?查看网站的 robots.txt
  • 图片版权是否合法使用?
  • 防止被封:添加请求头,控制请求频率(可用 time.sleep())。
  • 复杂网站可能需要 selenium 动态加载。

想继续深入?

我可以为你生成:

  • 指定关键词图片爬虫(如 Google/Bing 图搜)
  • 多线程/异步爬取加速版
  • 带 GUI 的图片爬虫工具
  • 支持自动分类图片的智能爬虫

你更倾向于哪种?