scrapy的配置文件settings

  1. #==>第一部分:基本配置<===
  2. #1、项目名称,默认的USER_AGENT由它来构成,也作为日志记录的日志名
  3. BOT_NAME = 'Amazon'
  4. #2、爬虫应用路径
  5. SPIDER_MODULES = ['Amazon.spiders']
  6. NEWSPIDER_MODULE = 'Amazon.spiders'
  7. #3、客户端User-Agent请求头
  8. #USER_AGENT = 'Amazon (+http://www.yourdomain.com)'
  9. #4、是否遵循爬虫协议
  10. # Obey robots.txt rules
  11. ROBOTSTXT_OBEY = False
  12. #5、是否支持cookie,cookiejar进行操作cookie,默认开启
  13. #COOKIES_ENABLED = False
  14. #6、Telnet用于查看当前爬虫的信息,操作爬虫等...使用telnet ip port ,然后通过命令操作
  15. #TELNETCONSOLE_ENABLED = False
  16. #TELNETCONSOLE_HOST = '127.0.0.1'
  17. #TELNETCONSOLE_PORT = [6023,]
  18. #7、Scrapy发送HTTP请求默认使用的请求头
  19. #DEFAULT_REQUEST_HEADERS = {
  20. # 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  21. # 'Accept-Language': 'en',
  22. #}
  23. #===>第二部分:并发与延迟<===
  24. #1、下载器总共最大处理的并发请求数,默认值16
  25. #CONCURRENT_REQUESTS = 32
  26. #2、每个域名能够被执行的最大并发请求数目,默认值8
  27. #CONCURRENT_REQUESTS_PER_DOMAIN = 16
  28. #3、能够被单个IP处理的并发请求数,默认值0,代表无限制,需要注意两点
  29. #I、如果不为零,那CONCURRENT_REQUESTS_PER_DOMAIN将被忽略,即并发数的限制是按照每个IP来计算,而不是每个域名
  30. #II、该设置也影响DOWNLOAD_DELAY,如果该值不为零,那么DOWNLOAD_DELAY下载延迟是限制每个IP而不是每个域
  31. #CONCURRENT_REQUESTS_PER_IP = 16
  32. #4、如果没有开启智能限速,这个值就代表一个规定死的值,代表对同一网址延迟请求的秒数
  33. #DOWNLOAD_DELAY = 3
  34. #===>第三部分:智能限速/自动节流:AutoThrottle extension<===
  35. #一:介绍
  36. from scrapy.contrib.throttle import AutoThrottle #http://scrapy.readthedocs.io/en/latest/topics/autothrottle.html#topics-autothrottle
  37. 设置目标:
  38. 1、比使用默认的下载延迟对站点更好
  39. 2、自动调整scrapy到最佳的爬取速度,所以用户无需自己调整下载延迟到最佳状态。用户只需要定义允许最大并发的请求,剩下的事情由该扩展组件自动完成
  40. #二:如何实现?
  41. Scrapy中,下载延迟是通过计算建立TCP连接到接收到HTTP包头(header)之间的时间来测量的。
  42. 注意,由于Scrapy可能在忙着处理spider的回调函数或者无法下载,因此在合作的多任务环境下准确测量这些延迟是十分苦难的。 不过,这些延迟仍然是对Scrapy(甚至是服务器)繁忙程度的合理测量,而这扩展就是以此为前提进行编写的。
  43. #三:限速算法
  44. 自动限速算法基于以下规则调整下载延迟
  45. #1、spiders开始时的下载延迟是基于AUTOTHROTTLE_START_DELAY的值
  46. #2、当收到一个response,对目标站点的下载延迟=收到响应的延迟时间/AUTOTHROTTLE_TARGET_CONCURRENCY
  47. #3、下一次请求的下载延迟就被设置成:对目标站点下载延迟时间和过去的下载延迟时间的平均值
  48. #4、没有达到200个response则不允许降低延迟
  49. #5、下载延迟不能变的比DOWNLOAD_DELAY更低或者比AUTOTHROTTLE_MAX_DELAY更高
  50. #四:配置使用
  51. #开启True,默认False
  52. AUTOTHROTTLE_ENABLED = True
  53. #起始的延迟
  54. AUTOTHROTTLE_START_DELAY = 5
  55. #最小延迟
  56. DOWNLOAD_DELAY = 3
  57. #最大延迟
  58. AUTOTHROTTLE_MAX_DELAY = 10
  59. #每秒并发请求数的平均值,不能高于 CONCURRENT_REQUESTS_PER_DOMAIN或CONCURRENT_REQUESTS_PER_IP,调高了则吞吐量增大强奸目标站点,调低了则对目标站点更加”礼貌“
  60. #每个特定的时间点,scrapy并发请求的数目都可能高于或低于该值,这是爬虫视图达到的建议值而不是硬限制
  61. AUTOTHROTTLE_TARGET_CONCURRENCY = 16.0
  62. #调试
  63. AUTOTHROTTLE_DEBUG = True
  64. CONCURRENT_REQUESTS_PER_DOMAIN = 16
  65. CONCURRENT_REQUESTS_PER_IP = 16
  66. #===>第四部分:爬取深度与爬取方式<===
  67. #1、爬虫允许的最大深度,可以通过meta查看当前深度;0表示无深度
  68. # DEPTH_LIMIT = 3
  69. #2、爬取时,0表示深度优先Lifo(默认);1表示广度优先FiFo
  70. # 后进先出,深度优先
  71. # DEPTH_PRIORITY = 0
  72. # SCHEDULER_DISK_QUEUE = 'scrapy.squeue.PickleLifoDiskQueue'
  73. # SCHEDULER_MEMORY_QUEUE = 'scrapy.squeue.LifoMemoryQueue'
  74. # 先进先出,广度优先
  75. # DEPTH_PRIORITY = 1
  76. # SCHEDULER_DISK_QUEUE = 'scrapy.squeue.PickleFifoDiskQueue'
  77. # SCHEDULER_MEMORY_QUEUE = 'scrapy.squeue.FifoMemoryQueue'
  78. #3、调度器队列
  79. # SCHEDULER = 'scrapy.core.scheduler.Scheduler'
  80. # from scrapy.core.scheduler import Scheduler
  81. #4、访问URL去重
  82. # DUPEFILTER_CLASS = 'step8_king.duplication.RepeatUrl'
  83. #===>第五部分:中间件、Pipelines、扩展<===
  84. #1、Enable or disable spider middlewares
  85. # See http://scrapy.readthedocs.org/en/latest/topics/spider-middleware.html
  86. #SPIDER_MIDDLEWARES = {
  87. # 'Amazon.middlewares.AmazonSpiderMiddleware': 543,
  88. #}
  89. #2、Enable or disable downloader middlewares
  90. # See http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html
  91. DOWNLOADER_MIDDLEWARES = {
  92. # 'Amazon.middlewares.DownMiddleware1': 543,
  93. }
  94. #3、Enable or disable extensions
  95. # See http://scrapy.readthedocs.org/en/latest/topics/extensions.html
  96. #EXTENSIONS = {
  97. # 'scrapy.extensions.telnet.TelnetConsole': None,
  98. #}
  99. #4、Configure item pipelines
  100. # See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html
  101. ITEM_PIPELINES = {
  102. # 'Amazon.pipelines.CustomPipeline': 200,
  103. }
  104. #===>第六部分:缓存<===
  105. """
  106. 1. 启用缓存
  107. 目的用于将已经发送的请求或相应缓存下来,以便以后使用
  108. from scrapy.downloadermiddlewares.httpcache import HttpCacheMiddleware
  109. from scrapy.extensions.httpcache import DummyPolicy
  110. from scrapy.extensions.httpcache import FilesystemCacheStorage
  111. """
  112. # 是否启用缓存策略
  113. # HTTPCACHE_ENABLED = True
  114. # 缓存策略:所有请求均缓存,下次在请求直接访问原来的缓存即可
  115. # HTTPCACHE_POLICY = "scrapy.extensions.httpcache.DummyPolicy"
  116. # 缓存策略:根据Http响应头:Cache-Control、Last-Modified 等进行缓存的策略
  117. # HTTPCACHE_POLICY = "scrapy.extensions.httpcache.RFC2616Policy"
  118. # 缓存超时时间
  119. # HTTPCACHE_EXPIRATION_SECS = 0
  120. # 缓存保存路径
  121. # HTTPCACHE_DIR = 'httpcache'
  122. # 缓存忽略的Http状态码
  123. # HTTPCACHE_IGNORE_HTTP_CODES = []
  124. # 缓存存储的插件
  125. # HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'
  126. settings.py