ken桑带你读源码之scrapy downloadermiddlewares
downloadermiddlewares 文件夹是下载中间件
其中 process_request 还没请求时的处理函数
process_response 请求之后的处理函数
chunked.py 简单说就是传输网页数据非常大的 或者 数据长度不确定用到 参考 http://blog.csdn.net/whatday/article/details/7571451
decompression.py 读取压缩文件 然后解压文件 替换 response 76行 response.replace(body=body, cls=respcls)
defaultheaders.py 获取默认的头部 settings['DEFAULT_REQUEST_HEADERS']
downloadtimeout.py 获取默认超时时间
httpauth.py 这个用户认证 是http认证 可以nginx 上配置的
httpcache.py 网页cache 首先判断 _dont_cache 是否为Ture 读取缓存 是否存在 是否过期 过期看这个 HTTPCACHE_EXPIRATION_SECS 一切正常就直接返回缓存 标识该request 已经缓存
特别有意思的是抓取出现异常 会调用缓存 哈哈
httpproxy.py 这个代码我就不说 但实际工作中 不用他的 我们会另外写一个代理池系统 存储 redis 然后再写一个中间件读取 代理ip 或者代理ip 存 squid 中间件也省了
redirect.py 该文件有两个中间件 RedirectMiddleware 服务器重定向中间件 判断 dont_redirect 是否为True 然后读取 response.headers['location'] 跳转过去
MetaRefreshMiddleware 网页重定向中间件 用正则 提取出 网页重定向的url 然后跳转
retry.py 重试中间件 判断 如果 http status 是否在 retry_http_codes request.meta.get('retry_times', 0) 是否超过 max_retry_times 然后 return request
特别有意思的是 发生异常 也会启用 重试中间件 这个非常实用!!!!! 超级赞
useragent.py 更新 User-Agent
stats.py 统计中间件 有一个统计异常很重要 30行 ex_class = "%s.%s" % (exception.__class__.__module__, exception.__class__.__name__)
32 行 self.stats.inc_value('downloader/exception_type_count/%s' % ex_class, spider=spider)
robotstxt.py 判断 robotstxt
ken桑带你读源码之scrapy downloadermiddlewares的更多相关文章
- ken桑带你读源码 之scrapy
开篇声明 文章讲解源码不一定从入口开始 主题更注重 思路讲解以及核心函数 ok? 废话到此为止 /scrapy/downloadermiddlewares/ 文件夹下是下载器的 中间件 ...
- ken桑带你读源码 之scrapy scrapy\core\scheduler.py
从英文来看是调度程序 我们看看是怎么调度 首先爬虫队列有两个 一个是保存在内存中 没有历史记录 重新开始 42行 self.mqs = self.pqclass(self._newmq) ...
- ken桑带你读源码 之scrapy scrapy\extensions
logstats.py 爬虫启动时 打印抓取网页数 item数 memdebug.py 爬虫结束 统计还被引用的内存 也就是说gc 回收不了的内存 memusage.py 监控爬虫 内存占用 ...
- ken桑带你读源码 之scrapy pipelines\images.py
大家先看看 http://www.cnblogs.com/attitudeY/p/7078559.html 下面我做一些补充 最新版本1.1 已经支持 下载路径保存到 item 48行 ...
- ken桑带你读源码 之 scrapy_redis
首先更大家说下 正式部署上线的爬虫会有分布式爬虫的需求 而且原本scrapy 的seen (判断重复url的池 不知道用啥词 已抓url吧 ) 保存在磁盘 url 队列 也是保存在磁盘 (保 ...
- Android AsyncTask完全解析,带你从源码的角度彻底理解
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11711405 我们都知道,Android UI是线程不安全的,如果想要在子线程里进 ...
- [一起读源码]走进C#并发队列ConcurrentQueue的内部世界
决定从这篇文章开始,开一个读源码系列,不限制平台语言或工具,任何自己感兴趣的都会写.前几天碰到一个小问题又读了一遍ConcurrentQueue的源码,那就拿C#中比较常用的并发队列Concurren ...
- Java读源码之ReentrantLock
前言 ReentrantLock 可重入锁,应该是除了 synchronized 关键字外用的最多的线程同步手段了,虽然JVM维护者疯狂优化 synchronized 使其已经拥有了很好的性能.但 R ...
- 带货直播源码开发采用MySQL有什么优越性
MySQL是世界上最流行的开源关系数据库,带货直播源码使用MySQL,可实现分钟级别的数据库部署和弹性扩展,不仅经济实惠,而且稳定可靠,易于运维.云数据库 MySQL 提供备份恢复.监控.容灾.快速扩 ...
随机推荐
- node:semantic version instruction
[major].[minor].[patch] MAJOR version when you make incompatible API changes, MINOR version when you ...
- 前端开发,页面加载速度性能优化,如何提高web页面加载速度
一个网页访问速度的快慢, 不仅看它服务器的配置,这里除去你空间主机配置很烂的情况以外,我们从网站开发方面来探讨,前端技术需要从哪些方面提高访问的速度,需要用到哪些技术手段. 文件的加载 图标的加载: ...
- YAML & JSON &XML如何选择
前言 本文翻译https://www.csestack.org/yaml-vs-json-vs-xml-difference/,下文会针对当前现有的数据序列化语言做下梳理.重点突出YAML是什么,优缺 ...
- 总结《深入理解JVM》 G1 篇
注:一下内容主要结合<深入理解JVM>3th总结而来. 接上一篇,我们来说说G1,G1作为现在的主要的JVM GC,被作为各大互联网主要使用的垃圾回收器,了解G1回回收原理和回收过程,才能 ...
- 震惊!慎老师怒吃pks并大呼:一口就吃完了!
慎老师吃pks是怎么回事呢?慎老师相信大家都很熟悉,但是慎老师吃pks是怎么回事呢,下面就让小编带大家一起了解吧. 慎老师吃pks,其实就是慎老师把花花蛤吃了,大家可能会很惊讶慎老师怎么会吃花花蛤呢? ...
- 日期推算:datetime
>>> import datetime >>> datetime.datetime.now() datetime.datetime(2020, 5, 20, 23, ...
- day24 常用模块(下)
目录 一.logging模块 1 日志级别 2 默认级别为warning,默认打印到终端 3 为logging模块指定全局配置,针对所有的logger有效,控制打印到文件中 4.logging配置文件 ...
- day80 前端项目
目录 一.初始化项目 二.安装路由vue-router 1 配置路由 1.1 初始化路由对象 1.2 注册路由信息 1.3 在视图中显示路由对应的内容 2 路由对象提供的操作 2.1 页面跳转 2.2 ...
- day30 继承、派生与多态,类中方法和内置函数
目录 一.多继承出现的问题(mixins机制) 二.派生与方法重用 三.多态 1 什么是多态 2 为什么要有多态 3 python中多态的鸭子类型 四.绑定方法与非绑定方法 1 绑定方法 1.1对象的 ...
- cas客户端流程详解(源码解析)--单点登录
博主之前一直使用了cas客户端进行用户的单点登录操作,决定进行源码分析来看cas的整个流程,以便以后出现了问题还不知道是什么原因导致的 cas主要的形式就是通过过滤器的形式来实现的,来,贴上示例配置: ...