原创: http://106.13.73.98/__/142/
先来张Scrapy框架图压压惊
下载中间件(Downloader Middlewares)是位于Scrapy引擎和下载器之间的一层组件。
它的作用是:
- 在引擎将请求传递给下载器的过程中,下载中间件可以对请求进行一系列的处理。比如设置User-Agent、设置代理IP等。
- 在下载器将Response传递给引擎的过程中,下载中间件可以对响应进行一系列的处理。比如进行gzip解压等。
下面将使用下载中间件来实现UA池与代理池
我们一般使用下载中间件处理请求,一般会对请求设置随机的User-Agent、代理IP。目的在于防止被爬取网站的反爬虫策略。基本步骤如下:
- 在中间件中拦截请求.
- 对拦截到的请求进行篡改User-Agent和设置代理IP.
- 在配置文件中启用下载中间件DOWNLOADER_MIDDLEWARES.
中间件文件middlewares.py代码如下:
import random from fake_useragent import UserAgent # UA库,我们这里就使用它来做UA池 # 这个便是下载中间价 class BlogDownloaderMiddleware(object): # 我们先定义好代理池 http = ['http://218.60.8.83:3129', 'http://59.44.247.194:9797'] https = ['https://85.62.30.211:8080', 'https://101.248.64.68:8080'] # http://www.goubanjia.com 提供很好的代理ip def process_request(self, request, spider): """ 这是下载中间件中 拦截请求 的方法 :param request: 拦截到的请求 """ # print(request) # <GET https://www.baidu.com/s?wd=ip> ua = UserAgent(use_cache_server=False).random # 生成随机UA request.headers['User-Agent'] = ua # 将生成的UA写入请求头中 # 判断请求是超文本传输协议,还是安全套接字超文本传输协议,并对其使用对应的代理池 request.meta['proxy'] = random.choice(getattr(self, request.url.split(':')[0])) return None def process_response(self, request, response, spider): """这是下载中间件中 拦截响应 的方法""" print(response) # <200 https://www.baidu.com/s?wd=ip> return response
最后在配置文件settings.py中启用下载中间件:
# 开启下载中间件 DOWNLOADER_MIDDLEWARES = { 'blog.middlewares.BlogDownloaderMiddleware': 543, }
原创: http://106.13.73.98/__/142/
原文地址:https://www.cnblogs.com/gqy02/p/11322456.html
时间: 2024-10-10 19:05:00