オリジナル:http://106.13.73.98/__/142/
あなたの神経を安定するために張Scrapyフレームワークマップ、先着
ダウンロードミドルウェア(ダウンローダミドルウェア)アセンブリは、エンジンと、ダウンロードの間Scrapy層が配置されています。
その役割は、以下のとおりです。
- エンジンの過程でダウンロード、処理要求のダウンロードミドルウェアシリーズへの要求を渡します。このような設定としてUser--エージェントを、プロキシIP設定などを。
- 応答処理は、ダウンロードエンジンで反応器に渡され、ミドルウェアは、治療反応のシリーズをダウンロードすることができます。例えば、その上の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, }