网站首页改版需求,有没有做高仿手表的网站,营销网站推荐,wordpress博客数据库1、Scrapy框架初识#xff08;点击前往查阅#xff09;
2、Scrapy框架持久化存储#xff08;点击前往查阅#xff09;
3、Scrapy框架内置管道#xff08;点击前往查阅#xff09;
4、Scrapy框架中间件 Scrapy 是一个开源的、基于Python的爬虫框架#xff0c;它提供了…1、Scrapy框架初识点击前往查阅
2、Scrapy框架持久化存储点击前往查阅
3、Scrapy框架内置管道点击前往查阅
4、Scrapy框架中间件 Scrapy 是一个开源的、基于Python的爬虫框架它提供了强大而灵活的工具用于快速、高效地提取信息。Scrapy包含了自动处理请求、处理Cookies、自动跟踪链接、下载中间件等功能
Scrapy框架的架构图今天的中间件看完回头来看下 引擎(Scrapy) 用来处理整个系统的数据流处理, 触发事务(框架核心) 调度器(Scheduler) 用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL抓取网页的网址或者说是链接的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址 下载器(Downloader) 用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的) 爬虫(Spiders) 爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面 项目管道(Pipeline) 负责处理爬虫从网页中抽取的实体主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后将被发送到项目管道并经过几个特定的次序处理数据。 什么是中间件 Scrapy的中间件有两个 爬虫中间件一般不会去用就不多赘述了 下载中间件 中间件在五大核心组件的什么位置 下载中间件位于引擎和下载器之间。 引擎会给下载器传递请求对象下载器会给引擎返回响应对象。 根据位置了解中间件的作用 可以拦截到scrapy框架中所有的请求和响应。 拦截请求干什么 修改请求的ip修改请求的头信息设置请求的cookie。 拦截响应干什么 可以修改响应数据。 一、中间件的应用
前置 settings 设置需要开启中间件 1中间件的介绍
这就是2个中间件其中 爬虫中间件 很少用到为了简介明了我们给他删除或者注释掉就行了。 下载中间件图片中的2个也用不到啥就删除即可了 精简完的代码也就是我们需要改写的与操作的主要参数作用介绍。 1.1中间件的运行顺序
下图可知
先执行 process_request 发起的请求先经过该函数。然后执行 process_respons 返回的数据先经过该函数。最后才会获取到返回的响应数据。
process_exception 函数为啥没执行
答因为没报错process_exception函数 只有在报错才会触发图二。 So 当我们知道了这个那可操作的空间就很大了。 例如 在 process_request 函数中我们可以设置 UA请求头、Cookie、代理等其他请求头。在 process_response 函数中我们可以修改响应回来的数据。在 process_exception 函数中我们可以获取错误并修改错误重新发起请求修改错误这个难度太大了知道有这个功能就行了。 2process_request 拦截修改请求
在该函数中我们做哪些设置和操作呢
1开发代理中间件 request.meta[proxy] proxy 2开发UA中间件
request.headers[User-Agent] ua 3开发Cookie中间件
request.cookies cookies Cookie补充具有session的功能 补充return返回值 return None # 这个地方就返回 None 就是正确的。# return request # 如果返回的是 request 代表重新发起请求这就死循环了。3process_response 拦截修改响应
1修改响应数据
数据的修改需要用到新的模块需要导入一下
from scrapy.http import HtmlResponse
参数
request接收传入的响应对象body修改后的数据url就是当前拦截到的请求urlencoding定义编码格式 补充return返回值 4、process_exception 拦截错误
拦截和处理发生异常的请求对象。参数reqeust就是拦截到的发生异常的请求对象exception就是异常信息。方法存在的意义将发生异常的请求拦截到然后对其进行修正 5、spider的作用 数据交互
在中间件的3个函数中都有 spider 这个参数那这个参数是做啥的 答数据交互
那如何数据交互呢接着往下看⬇️⬇️⬇️
例如
图一中我们在爬虫文件中设置了一个变量 msg
图二中我们利用 spider.msg 就可以调用变量 msg
总结由此我们可以得出在中间件中只要有参数 spider 就可以调用 爬虫文件中的数据进行数据交互spider 就相当于 爬虫文件中类的实例化对象。
图一 ⬇️ 图二⬇️ 补充管道中 spider 作用
如下图
管道中的 spider 功能都是一样的也是用于数据交互的。