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
)

&spm=1001.2101.3001.5002&articleId=155006578&d=1&t=3&u=802cd9e7698b49089fae37076b300a7f)
765

被折叠的 条评论
为什么被折叠?



