Downloader Middlewares (下载器中间件)
Scarpy 的新版本能自动生成 下载器中间件,一般不用自己去重写
下载器中间件是引擎和下载器之间通信的中间件。在这个中间件中我们可以设置代理、更换请求头等来达到反反爬虫的目的。要写下载器中间件,可以在下载器中实现两个方法..
process_request(self, request, spider)
:这个方法是在请求发送之前会执行process_ response(self , request, response, spider)
,这个方法是数据下载到引擎之前执行
process_request(self, request, spider)
这个方法是在请求发送之前会执行
参数:
- request:发送请求的request对象。
- spider:发送请求的spider对象
返回值:
已经激活中间件, process_ response()方法 则会在每个response返回时被调用。
- 返回None:Scrapy将继续处理该请求,执行其他中间件中的相应方法,直到合适的下载器处理函数被调用。
- 返回Response对象: Scrapy将不会调用任何其他的
process. request方法
,将直接返回这个response对象
。 - 返回Request对象:不再使用之前的request对象去下载数据,而是根据现在返回的request对象返回数据。如果这个方法中抛出了异常,则会调用
process.exception方法
。
process_response(self, request, response, spider)
这个方法是在收到相应时执行
参数:
- request: request对象。
- response:待处理的response对象。
- spider: splder对象。
返回值:
- 返回Response对象:会将这个新的Response对象传给其他中间件处理。
- 返回Request对象:下载器链被切断,返回的Request会重新被下载器调度请求。
- 如果抛出一个异常,那么调用request的errback 方法,如果没有指定这个方法,那么会抛出一个异常。
随机请求头
请求头网站:
http://www.useragentstring.com/pages/useragentstring.php?typ=Browser
开启下载中间件
# Enable or disable downloader middlewares # See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html DOWNLOADER_MIDDLEWARES = { 'headersApp.middlewares.HeadersappDownloaderMiddleware': 543, }
设置随机请求头
在 middlewares.py 里编辑 DownloaderMiddleware() 类
class HeadersappDownloaderMiddleware(object): HEADERS = [ 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1', 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.21pre) Gecko K-Meleon/1.7.0', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows XP 5.1) Lobo/0.98.4', 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.28) Gecko/20120410 Firefox/3.6.28 ' ] def process_request(self, request, spider): import random request.headers['User-Agent'] = random.choice(self.HEADERS) return None
版权声明:《 Scrapy框架随机请求头 》为明妃原创文章,转载请注明出处!
最后编辑:2019-12-9 09:12:21