当前位置: 首页 > news >正文

南昌专业的学校网站建设公司东莞市住房和城乡建设局网站

南昌专业的学校网站建设公司,东莞市住房和城乡建设局网站,建筑设计防火规范2021,平凉哪家做企业网站Scrapy 和 scrapy-redis的区别 Scrapy 是一个通用的爬虫框架#xff0c;但是不支持分布式#xff0c;Scrapy-redis是为了更方便地实现Scrapy分布式爬取#xff0c;而提供了一些以redis为基础的组件(仅有组件)。 pip install scrapy-redis Scrapy-redis提供了下面四种组件但是不支持分布式Scrapy-redis是为了更方便地实现Scrapy分布式爬取而提供了一些以redis为基础的组件(仅有组件)。 pip install scrapy-redis Scrapy-redis提供了下面四种组件components(四种组件意味着这四个模块都要做相应的修改) SchedulerDuplication FilterItem PipelineBase Spider scrapy-redis架构 如上图所⽰示scrapy-redis在scrapy的架构上增加了redis基于redis的特性拓展了如下组件 Scheduler Scrapy改造了python本来的collection.deque(双向队列)形成了自己的Scrapy queue(https://github.com/scrapy/queuelib/blob/master/queuelib/queue.py))但是Scrapy多个spider不能共享待爬取队列Scrapy queue 即Scrapy本身不支持爬虫分布式scrapy-redis 的解决是把这个Scrapy queue换成redis数据库也是指redis队列从同一个redis-server存放要爬取的request便能让多个spider去同一个数据库里读取。 Scrapy中跟“待爬队列”直接相关的就是调度器Scheduler它负责对新的request进行入列操作加入Scrapy queue取出下一个要爬取的request从Scrapy queue中取出等操作。它把待爬队列按照优先级建立了一个字典结构比如 {优先级0 : 队列0优先级1 : 队列1优先级2 : 队列2}然后根据request中的优先级来决定该入哪个队列出列时则按优先级较小的优先出列。为了管理这个比较高级的队列字典Scheduler需要提供一系列的方法。但是原来的Scheduler已经无法使用所以使用Scrapy-redis的scheduler组件。 Duplication Filter Scrapy中用集合实现这个request去重功能Scrapy中把已经发送的request指纹放入到一个集合中把下一个request的指纹拿到集合中比对如果该指纹存在于集合中说明这个request发送过了如果没有则继续操作。这个核心的判重功能是这样实现的 def request_seen(self, request):# 把请求转化为指纹 fp self.request_fingerprint(request)# 这就是判重的核心操作 self.fingerprints就是指纹集合if fp in self.fingerprints:return True #直接返回self.fingerprints.add(fp) #如果不在就添加进去指纹集合if self.file:self.file.write(fp os.linesep)在scrapy-redis中去重是由Duplication Filter组件来实现的它通过redis的set 不重复的特性巧妙的实现了Duplication Filter去重。scrapy-redis调度器从引擎接受request将request的指纹存⼊redis的set检查是否重复并将不重复的request push写⼊redis的 request queue。 引擎请求request(Spider发出的时调度器从redis的request queue队列⾥里根据优先级pop 出⼀个request 返回给引擎引擎将此request发给spider处理。 Item Pipeline 引擎将(Spider返回的)爬取到的Item给Item Pipelinescrapy-redis 的Item Pipeline将爬取到的 Item 存⼊redis的 items queue。 修改过Item Pipeline可以很方便的根据 key 从 items queue 提取item从⽽实现 items processes集群。 Base Spider 不在使用scrapy原有的Spider类重写的RedisSpider继承了Spider和RedisMixin这两个类RedisMixin是用来从redis读取url的类。 当我们生成一个Spider继承RedisSpider时调用setup_redis函数这个函数会去连接redis数据库然后会设置signals(信号) 一个是当spider空闲时候的signal会调用spider_idle函数这个函数调用schedule_next_request函数保证spider是一直活着的状态并且抛出DontCloseSpider异常。 一个是当抓到一个item时的signal会调用item_scraped函数这个函数会调用schedule_next_request函数获取下一个request。
http://www.w-s-a.com/news/871741/

相关文章:

  • ps中怎样做网站轮播图片吉林省网站建设公司
  • 广西网站建设-好发信息网温江做网站哪家好
  • 网站建设属于什么职位类别南京哪个网站建设比较好
  • wdcp 网站备份东莞网站建设五金建材
  • 天津制作网站的公司电话wordpress架设进出销
  • tomcat做静态网站prestashop和wordpress
  • 上海响应式建站wap网站微信分享代码
  • 四川建筑人才招聘网南昌网站优化
  • 南充网站建设制作重庆有的设计网站大全
  • 深圳沙井做网站公司网站搭建谷歌seo
  • 学校资源网站的建设方案山西省住房城乡建设厅网站
  • 医疗行业网站建设深圳网络科技公司排名
  • 企业形象型网站建设wordpress chess
  • 网站的域名起什么好处罗湖网站建设公司乐云seo
  • 网站的服务器在哪里sem推广软件选哪家
  • 科技网站欣赏婚庆公司经营范围
  • 网站后台管理系统php校园网站建设意见表填写
  • 网站建设问题调查常州百度推广代理公司
  • net网站开发学习谷歌优化培训
  • 企业网站公众号广东网站建设方便
  • 2008r2网站建设张店网站建设方案
  • 企业网站首页学生做的网站成品
  • 网站开发 架构设计企业信息管理系统的组成不包括
  • 网站维护模式网页传奇游戏平台排行
  • 企业网站改自适应蛋糕方案网站建设
  • 网站开发技术职责网站升级中html
  • 天网网站建设百度权重高的网站
  • 明年做哪些网站致富网站站长 感受
  • 东莞营销网站建设优化怎么做微信网站推广
  • 网站建设一个多少钱php网站服务器怎么来