下面将使用下载中间件来实现 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://www.bubuko.com/infodetail-3148390.html