中间件
-
作用:批量拦截请求和响应 -
爬虫中间件 -
下载中间件(推荐)
详解:
我们创建个工程middlePro ,爬取百度和搜狗。
import scrapy
class MiddleSpider(scrapy.Spider):
name = 'middle'
start_urls = ['https://www.baidu.com/', 'https://www.sogou.com']
def parse(self, response):
print(response)
然后我们看下中间件这个文件middlewares.py

这里我们不需要爬虫中间件,把它删除。主要看下载中间件里的内容:
下载中间件MiddleproDownloaderMiddleware 中也有一个不需要的方法和注释,删除掉,只需留下下面三个需要重写的方法:

def process_request(self, request, spider):
return None
def process_response(self, request, response, spider):
return response
def process_exception(self, request, exception, spider):
pass
打印之前,需要在配置文件settings.py 中设置中间件:
DOWNLOADER_MIDDLEWARES = {
'middlePro.middlewares.MiddleproDownloaderMiddleware': 543,
}

管道也打开。但这里先不设置UA 和ROBOTSTXT_OBEY = True 。
运行下:

我们看到网页被请求中间件 和响应中间件 正常拦截了(不然不会打印)。其中搜狗没有异常拦截 ,百度有异常拦截 。
我们设置ROBOTSTXT_OBEY = False ,再去运行下:

这时,因为我们忽略了robots协议 ,就都没有异常拦截了
举例:
process_exception :
def process_exception(self, request, exception, spider):
print('process_exception()')
return request
process_response :
def process_response(self, request, response, spider):
print('process_response()')
request.headers['User-Agent']='xxx'
request.headers['Cookie'] = 'xxx'
return response
|