scrapy中间件

scrapy中间件位于Spider和引擎(爬虫中间件),引擎和下载器(下载器中间件)之间,是处理Requset,Response和Item的扩展。
爬虫中间件:处理发送给Spider的Request以及Spider产生的Response和Item
下载器中间件:处理发出去的Requset和返回的Response

Scapy框架

在这里插入图片描述
基本流程:
1、引擎从spider获取最初的Requests。
2、调度器存放引擎发送的requests,引擎向调度器请求下一次爬取的请求。
3、调度器返回给引擎请求的结果
4、引擎将请求通过下载器中间件发送给下载器
5、下载器将生成的Response通过下载器中间件返回给引擎
6、引擎将得到的Response通过爬虫中间件发送给Spider处理
7、Spider将处理的Response,爬取的Item和新的Requests通过爬虫中间件发送给引擎
8、引擎将Item发送给Item管道,将Requests发送给调度器,并向调度器请求下一个要爬取的请求,之后重复

下载器中间件

在创建项目会在middlewares.py文件中生成一个下载器中间件的模板,其中的函数如下:
1、process_request(self, request, spider)
该函数在引擎将Requests发送给下载器前调用,用于对Requests请求加工,返回None、Request、Response和IgnoreRequest异常,在上面流程的2步骤。
返回None:其他下载器中间件的process_request(self, request, spider)函数执行,直到其中一个返回Request为止。
返回Request:其他下载器中间件的process_request(self, request, spider)函数不执行,将加工后的Request发往调度器,排队等待新一轮的process_request()函数执行。
返回Response:告诉引擎结束,不需其他下载器中间件的process_request()函数执行,接着执行process_response()函数
返回异常:调用process_exception(request, exception, spider)函数,返回None。
2、process_response(request, response, spider)
在1函数返回Response时调用,同样返回Response、Request和IgnoreRequest异常
返回Response:被下一个process_response()函数处理
返回Request:中间链停止,重新调度下载
返回异常:调用函数Request_errback()函数
3、process_exception(request, exception, spider)
被调用时返回None

爬虫中间件

在创建项目时,在middlewares.py文件中生成的爬虫中间件,其中几个函数如下:
1、process_spider_input(response, spider)
当Response传给Spider的解析函数前调用,返回None或异常
2、process_spider_output(response, result, spider)
当Spider解析函数处理完Response时该函数被调用,接受Response和对应解析出的result
3、process_spider_exception(response, exception, spider)
当1函数返回异常时被调用,回None或可迭代对象的Request、dict、Item,如果返回None将继续被其他spider中间件的异常处理。

scrapy的随机更换User-Agent

使用第三方user-agent库(fake-useragent)实现随机更换
1、行命令pip install fake-user-agent
2、在middlewares.py中导入fake-useragnet库,编写中间件
在这里插入图片描述
在setting.py文件中将ROBOTSTXT_OBEY = TRUE 改为ROBOTSTXT_OBEY = False即不遵守robots协议
并启用DOWNLOADER_MIDDLEWARES
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值