Scrapy实战:5分钟搞定网站图片批量下载(附完整代码)

Scrapy图片爬取实战:从零构建高效下载系统

1. 环境准备与项目初始化

在开始Scrapy图片爬取项目前,确保已安装Python 3.6+版本。推荐使用虚拟环境隔离项目依赖:

python -m venv scrapy_env
source scrapy_env/bin/activate  # Linux/Mac
scrapy_env\Scripts\activate     # Windows

安装Scrapy框架及图像处理依赖:

pip install scrapy pillow

创建Scrapy项目并生成爬虫模板:

scrapy startproject image_crawler
cd image_crawler
scrapy genspider pic_spider example.com

项目目录结构说明:

image_crawler/
├── scrapy.cfg
└── image_crawler
    ├── __init__.py
    ├── items.py
    ├── middlewares.py
    ├── pipelines.py
    ├── settings.py
    └── spiders
        ├── __init__.py
        └── pic_spider.py

2. 核心组件配置

2.1 定义Item数据结构

修改items.py文件,定义图片爬取的数据结构:

import scrapy

class ImageItem(scrapy.Item):
    image_urls = scrapy.Field()  # 图片URL列表
    images = scrapy.Field()      # 下载后的图片信息
    title = scrapy.Field()       # 图片所属标题/分类
    source = scrapy.Field()      # 图片来源页面

2.2 配置图片管道

settings.py中启用图片管道并设置存储路径:

ITEM_PIPELINES = {
    'scrapy.pipelines.images.ImagesPipeline': 1,
}

IMAGES_STORE = './downloaded_images'  # 图片存储目录
IMAGES_THUMBS = {
    'small': (150, 150),  # 小缩略图
    'big': (800, 600),    # 大缩略图
}

高级配置选项:

  • IMAGES_EXPIRES = 30:图片30天内不重复下载
  • IMAGES_MIN_HEIGHT = 100:过滤高度小于100px的图片
  • IMAGES_MIN_WIDTH = 100:过滤宽度小于100px的图片

3. 爬虫开发实战

3.1 基础爬虫实现

修改pic_spider.py,实现图片URL抓取逻辑:

import scrapy
from image_crawler.items import ImageItem

class PicSpider(scrapy.Spider):
    name = 'pic_spider'
    allowed_domains = ['example.com']
    start_urls = ['http://example.com/gallery']

    def parse(self, response):
        # 提取图片容器元素
        for gallery_item in response.css('.gallery-item'):
            yield ImageItem(
                title=gallery_item.css('h3::text').get(),
                image_urls=[gallery_item.css('img::attr(src)').get()],
                source=response.url
            )

3.2 高级特性实现

分页处理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值