Scrapy 管道机制与项目配置详解
在实际开发中,Scrapy 的 Item Pipeline 是数据清洗和存储的核心环节。框架内置了 ImagesPipeline 和 FilesPipeline,开箱即用。若需定制逻辑,直接继承它们即可。
图像与文件管道处理
默认情况下,Scrapy 会自动下载图片并保存到指定目录。如果需要自定义行为,比如生成缩略图,无需修改底层代码,只需在配置文件中设置即可。
from scrapy.pipelines.images import ImagesPipeline
class MyImagesPipeline(ImagesPipeline):
def item_completed(self, results, item, info):
# 在这里可以添加额外的逻辑,例如记录失败项
return item
关于缩略图配置,直接在 settings.py 中定义尺寸映射,系统会自动处理:
IMAGES_THUMBS = {
'800x600': (800, 600),
'1024x768': (1024, 768),
'1440x900': (1440, 900),
'2560x1600': (2560, 1600),
}
文件管道的配置类似,主要关注存储路径和字段名:
FILES_URLS_FIELD = 'url'
FILES_STORE = 'fileimages'
动态网站采集策略
面对渲染后的动态网页,直接爬取源码往往拿不到数据。建议先在浏览器 Network 面板定位真实请求地址,拿到响应后直接用 json.loads() 转为字典处理。
import json
response_text = response.text
json_obj = json.loads(response_text)
# 后续处理 json_obj
反爬与并发配置
项目启动前的配置同样关键。为了规避反爬,CONCURRENT_REQUESTS 不宜过大,配合 DOWNLOAD_DELAY 控制频率。ROBOTSTXT_OBEY 设为 False 可跳过协议限制(视合规要求而定)。中间件层面,通过随机 User-Agent 能有效降低被封风险。
DOWNLOADER_MIDDLEWARES = {
: ,
: ,
}
ITEM_PIPELINES = {
: ,
}
IMAGES_STORE =
IMAGES_URLS_FIELD =

