134 scrapy框架详解, 配置文件的设置, 请求传参, 代理池, 中间件的设置
主要内容:
1 scrapy框架的详解:https://blog.csdn.net/qq_37143745/article/details/80996707
a : 各部分的功能:
Spiders(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器)
Engine(引擎):负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。
Scheduler(调度器):它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。
Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理
ItemPipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.
Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。
Spider Middlewares(Spider中间件):你可以理解为是一个可以自定扩展和操作引擎和Spider中间
b : 代码执行流程:
SPIDERS的yeild将request发送给ENGIN
ENGINE对request不做任何处理发送给SCHEDULER
SCHEDULER( url调度器),生成request交给ENGIN
ENGINE拿到request,通过MIDDLEWARE进行层层过滤发送给DOWNLOADER
DOWNLOADER在网上获取到response数据之后,又经过MIDDLEWARE进行层层过滤发送给ENGIN
ENGINE获取到response数据之后,返回给SPIDERS,SPIDERS的parse()方法对获取到的response数据进行处理,解析出items或者requests
将解析出来的items或者requests发送给ENGIN
ENGIN获取到items或者requests,将items发送给ITEMPIPELINES,将requests发送给SCHEDULER
2 请求传参(meta): yield scapy.Request(url=url, callback=self.parse, meta={"item",item})
需求: 将不再同一个页面的数据写在一起, 需要用到请求传参
代码: 见第六天
3 配置文件的设置:
# 增加并发: # 默认scrapy开启的并发线程为32个,可以适当进行增加。在settings配置文件中修改CONCURRENT_REQUESTS = 100值为100,并发设置成了为100。 # # 降低日志级别: # 在运行scrapy时,会有大量日志信息的输出,为了减少CPU的使用率。可以设置log输出信息为INFO或者ERROR即可。在配置文件中编写:LOG_LEVEL = ‘INFO’ # # 禁止cookie: # 如果不是真的需要cookie,则在scrapy爬取数据时可以禁止cookie从而减少CPU的使用率,提升爬取效率。在配置文件中编写:COOKIES_ENABLED = False # # 禁止重试: # 对失败的HTTP进行重新请求(重试)会减慢爬取速度,因此可以禁止重试。在配置文件中编写:RETRY_ENABLED = False # # 减少下载超时: # 如果对一个非常慢的链接进行爬取,减少下载超时可以能让卡住的链接快速被放弃,从而提升效率。在配置文件中进行编写:DOWNLOAD_TIMEOUT = 10 超时时间为10s CONCURRENT_REQUESTS = 10 # LOG_LEVEL = 'ERROR' COOKIES_ENABLED = False RETRY_ENABLED = False # DOWNLOAD_TIMEOUT = 5
4 代理池:在中间件中设置
用处: 当请求次数过多, ip被禁掉, 或者不想被别人看到自己真实的ip,
代码: 见第六天爬虫