Scrapy是一个用于爬取网站并提取结构化数据的Python库。其中,中间件是Scrapy的一个重要组成部分,它允许用户在爬虫的请求-响应爬取周期中,定制化地修改Scrapy的行为。
Scrapy中间件主要有两种类型:下载器中间件(Downloader Middleware)和爬虫中间件(Spider Middleware)。
- 下载器中间件:介于Scrapy的请求发送和响应接收之间,可以处理发送的请求和接收到的响应。
- 爬虫中间件:介于Scrapy的爬虫和引擎之间,可以处理爬虫的响应和请求。
下面是一个简单的下载器中间件的例子,它会在每次发送请求之前打印一条消息:
class SimpleDownloaderMiddleware:
@classmethod
def from_crawler(cls, crawler):
# 使用这个方法可以从爬虫中获取配置信息
return cls()
def process_request(self, request, spider):
print(f"Sending request to: {request.url}")
# 返回None或者一个Response对象,如果返回None,则继续处理请求,如果返回Response对象,则不再处理,直接返回该响应
return None
def process_response(self, request, response, spider):
# 处理响应
print(f"Received response for: {request.url}")
return response
def process_exception(self, request, exception, spider):
# 处理异常
print(f"Exception for: {request.url} Exception: {exception}")
return None
在Scrapy项目中使用中间件,需要在项目的settings.py
文件中启用并配置中间件。例如,启用上述下载器中间件:
DOWNLOADER_MIDDLEWARES = {
'myproject.middlewares.SimpleDownloaderMiddleware': 543,
}
这里的数字543是中间件的优先级,数字越小,优先级越高。