简单来说,下载器中间件就是引擎和下载器之间通信的中间件。主要目的用来更换请求头、设置代理IP来达到应对网站反爬的情况。
举个例子来说:
1、在我们频繁访问一个页面时,如果请求头一直保持一致,那么就很容易被服务器发现,从而禁止掉这个请求头访问,那么我们就需要设置请求头中间件来应对网站反爬。
2、同样的,我们也可以通过设置 代理IP 来应对网站反爬。
这就是设置下载器中间件的原因与方法。
二、如何设置下载器中间件?1.自行定义请求头中间件:
常见的请求头列表网址:
http://www.useragentstring.com/pages/useragentstring.php?typ=Browser
class UserAgentDownloadMiddleware(object): USER_AGENTS = [ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36', 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2919.83 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2866.71 Safari/537.36', 'Mozilla/5.0 (X11; Ubuntu; Linux i686 on x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2820.59 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv,2.0.1) Gecko/20100101 Firefox/4.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2762.73 Safari/537.36' ] def process_request(self,request,spider): user_agent = random.choice(self.USER_AGENTS) request.headers['User-Agent'] =user_agent
2.设置代理IP:
- 快代理:快代理 - 企业级代理云服务提供商
-
蚂蚁代理:蚂蚁代理-最新免费代理ip,高质量代理ip
class IPProxyDownloadMiddleware(object): PROXIES = [ "ip:port" ] def process_request(self,request,spider): proxy = random.choice(self.PROXIES) print('被选中的代理:%s' % proxy) request.meta['proxy'] = proxy