-
Python爬虫连载17-ItemPipeLine、中间件
一、ItemPipeLine
1.爬虫提取出的数据存入item之后,item中保存的数据需要进一步处理,比如:清洗,去重,存储等
2.pipeline需要process_item函数
(1)process_item:spider提出来的item作为参数出入,同时传入的还有spider;此方法是必须要实现的;必须返回一个item对象,被丢弃的item不会被之后的pipeline处理
(2)__init__:构造函数
进行一些必要的参数初始化
(3)open_spider(spider)
spider对象被开启的时候调用
(4)close_spider(spider)
spider对象被关闭的时候调用
3.Spider
(1)对应的是文件夹spiders下的文件
(2)__init__:初始化爬虫的名称,start_urls列表
(3)start_requests:生成Requests对象嫁给Scrapy下载并返回response
(4)parse:根据返回的response解析出相应的item,item自动进入到pipeline;如果需要,解析出url,url自动交给requests模块,一直循环下去
(5)start_request:此方法仅能被调用一次,读取start_urls内容并启动循环过程
(6)name:设置爬虫的名字
(7)start_urls:设置开始第一批爬取的url
(8)allow_domains:spider允许爬取的域名列表
(9)start_request(self):只被调用一次
(10)parse
(11)log:日志记录
二、中间件
1.定义:中间件是处于引擎和下载器中间的一层组件
2.作用:对发出的请求和返回的结果进行预处理
3.数量:可以有很多个,被按顺序加载执行
4.位置:在middlewares文件中,需要在settings中设置以便生效
5.编写十分简单
6.必须实现以下一个或者多个方法
(1)process_request(self,request,spider)
在request通过的时候被调用;必须返回None或者Request或Response或raise IgnoreRequest;
None:scrapy将继续处理该request
Request:scrapy将停止调用process_request并冲洗调度返回的request
Response:scrapy将不会调用其他的process_request或者process_exception,直接将该response作为结果同时会调用process_response函数
(2)process_response(self,request,response,spider)
跟process_request大同小异;每次返回结果的时候会自动调用;可以有多个,按顺序调用。
三、源码
2.CSDN:https://blog.csdn.net/weixin_44630050
出 处:https://www.cnblogs.com/ruigege0000/p/12571702.html