一、使用项目配置文件的好处
1. 集中管理配置
配置文件将各种设定集中管理,避免了在代码中散布配置参数。这使得开发人员能够方便地找到并修改全局参数,不必在代码的各个部分寻找。
2. 提升代码可维护性
配置文件将程序逻辑与具体的配置解耦,使代码更易于维护。开发人员可以专注于实现功能,而无需频繁修改代码中嵌入的硬编码参数。
3. 便于环境切换
不同的环境(如开发、测试、生产)往往需要不同的配置。通过配置文件,开发者可以轻松地为不同环境提供不同的设置,例如数据库连接信息、日志级别、调度策略等。Scrapy 的 settings.py 就支持通过命令行指定配置文件,适应不同场景。
4. 提高复用性和灵活性
配置文件可以被多次复用。对于需要在多个项目或模块间共享的配置,只需要维护一个配置文件,而不必每次手动配置。Scrapy 支持用户通过 settings.py 配置爬取延迟、下载中间件、爬虫等参数,使得框架的使用更灵活。
5. 安全性
通过将敏感信息如 API 密钥、数据库凭证等存储在单独的配置文件中,开发者可以在发布时轻松忽略这些文件,不将其暴露到版本控制系统中,增强安全性。
6. 支持动态加载配置
Scrapy 允许在运行时通过 settings.py 文件动态调整某些配置,比如请求的并发数、用户代理等,使得爬虫能够根据实际需求灵活调整,而无需重启或修改源代码。
7. 简化团队协作
团队成员可以通过配置文件快速了解整个项目的设置,统一参数的使用标准,减少了由于个别成员使用不同配置而引发的问题。Scrapy 的 settings.py 清晰地列出爬虫行为的各个配置项,有助于团队之间的合作。
二、scrapy的setting.py
# Scrapy settings for douban project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
# https://docs.scrapy.org/en/latest/topics/settings.html
# https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
# https://docs.scrapy.org/en/latest/topics/spider-middleware.html
在较为项目复杂或者是想要了解更多的信息可以到官网查看官方文档,包含setting、middleware等。
BOT_NAME = "douban"
SPIDER_MODULES = ["douban.spiders"]
NEWSPIDER_MODULE = "douban.spiders"
BOT_NAME 就是项目名,MODULES就是一个包含所有scrapy项目的列表。
# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = "douban (+http://www.yourdomain.com)"
Crawl responsibly by identifying yourself:进行爬取时要“负责任”,明确表明你的身份。这意味着在进行网络爬取时,不要伪装成其他浏览器,而应明确声明爬虫的身份,尊重网站的使用条款。
(and your website):这里提到的“你的网站”是指,如果你的爬虫有对应的官方网站,可以在 User-Agent 中附上该网站的 URL。这样网站管理员可以追踪到爬虫来源并联系你,以防爬虫对服务器造成负面影响。
# Obey robots.txt rules
ROBOTSTXT_OBEY = False
是否遵守君子协议,就是先访问对方网站的robots.txt,明确哪些东西可以爬,哪些东西不能爬。懂得都懂。
# Configure maximum concurrent requests performed by Scrapy (default: 16)
#CONCURRENT_REQUESTS = 32
并发请求指的是爬虫在同一时间内可以同时发出的请求数。也就是说,爬虫可以在一个时刻与多个服务器或页面进行交互,而不是每次完成一个请求后再开始下一个请求。
Scrapy 默认的最大并发请求数为 16。这意味着在默认情况下,Scrapy 会同时发出最多 16 个请求。可以修改 CONCURRENT_REQUESTS 的值。注释中的例子给出的是 32,也就是最多可以同时发出 32 个请求。
# Configure a delay for requests for the same website (default: 0)
# See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
#DOWNLOAD_DELAY = 3
# The download delay setting will honor only one of:
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
#CONCURRENT_REQUESTS_PER_IP = 16
请求延迟是指在同一个网站上的连续请求之间设置的等待时间。也就是说,Scrapy 在向同一网站发送多个请求时,会在每次请求之间暂停一段时间,以避免对目标网站造成压力,模拟类似人类用户的行为。默认情况下,这个延迟为 0 秒,也就是说 Scrapy 在同一个网站上的请求是没有等待时间的,可以立即连续发送。AutoThrottle 设置,可以根据目标网站的负载动态调整请求速度。通过设置DOWNLOAD_DELAY来进行控制。
CONCURRENT_REQUESTS_PER_DOMAIN:该选项用于设置每个域名的最大并发请求数。如果设置为 16,则 Scrapy 对某一个域名的同时并发请求不会超过 16 个。这个配置项允许你控制对每个域名发出的请求数量,避免对某个特定域名过度爬取。
CONCURRENT_REQUESTS_PER_IP:该选项用于设置每个 IP 地址的最大并发请求数。如果 Scrapy 通过代理发送请求,可以根据目标网站的 IP 地址限制并发请求数。比如,如果某些网站有多个域名但同一个 IP 地址,你可以通过这个配置来限制并发请求
# Disable cookies (enabled by default)
#COOKIES_ENABLED = False
Cookies 是服务器发送给客户端的少量数据,存储在客户端的浏览器中,通常用于会话管理、用户跟踪和个性化设置。当客户端访问同一网站时,浏览器会携带相应的 Cookie 发送请求,服务器根据这些 Cookies 可以识别用户的身份或保存的状态信息。
Disable cookies (enabled by default):意思是 "禁用 Cookies(默认情况下是启用的)"。Scrapy 默认情况下会启用 Cookies 处理,这意味着每个请求都会携带 Cookies 信息,这对某些依赖 Cookies 的网站至关重要。
启用 Cookies 的情况:
保持会话状态:某些网站使用 Cookies 进行会话管理,比如用户登录、购物车、用户偏好设置等。如果爬虫需要访问这些页面,必须启用 Cookies 才能保持与服务器的连续会话状态。
访问受限制的内容:一些网站只有登录后才能访问部分内容,启用 Cookies 可以保存登录状态,从而访问这些内容。
禁用 Cookies 的情况:
减少网络开销:如果目标网站不依赖 Cookies 或者对 Cookies 处理无需求,禁用它可以减少网络开销,提升爬取效率。
防止跟踪:网站可以通过 Cookies 追踪客户端的行为,禁用 Cookies 可以避免被追踪到爬虫的访问模式。
避免干扰:有些网站通过设置 Cookies 来记录用户的访问行为并相应调整页面,禁用 Cookies 可以防止这些干扰因素,爬虫能够获取到一致的页面内容。
# Disable Telnet Console (enabled by default)
#TELNETCONSOLE_ENABLED = False
Telnet 控制台是 Scrapy 提供的一个远程调试工具。通过它,你可以在爬虫运行时,实时查看和修改一些参数或状态,比如查看请求队列、修改设置、调试正在运行的代码等。当这个配置项为 True(默认值),Scrapy 启动时会开启 Telnet 控制台,允许你通过 Telnet 客户端连接到爬虫的进程进行调试。
# Override the default request headers:
# DEFAULT_REQUEST_HEADERS = {
# }
配置默认请求头,设置请求头的目的就是为了让目标网站将我们的请求标记为正常浏览器的行为,而不是爬虫程序,设置默认请求头之后每次请求都会带上该请求头,也可以在中间件中进行参数添加等操作。如果爬虫403了,首先看看是不是请求头出了问题。
# Enable or disable spider middlewares
# See https://docs.scrapy.org/en/latest/topics/spider-middleware.html
#SPIDER_MIDDLEWARES = {
# "douban.middlewares.DoubanSpiderMiddleware": 543,
#}
爬虫中间件是介于引擎和爬虫之间的一种组件,用于对传入和传出的数据(如请求和响应)进行处理。你可以通过自定义中间件来控制 Scrapy 如何处理这些数据流。
键:"douban.middlewares.DoubanSpiderMiddleware" 指定了自定义的中间件的 Python 路径,也就是你自己定义的爬虫中间件类。
值:543 是中间件的优先级,数值越小,优先级越高,越早执行。
# Enable or disable downloader middlewares
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
#DOWNLOADER_MIDDLEWARES = {
# "douban.middlewares.DoubanDownloaderMiddleware": 543,
#}
下载器中间件(Downloader Middleware)是 Scrapy 框架中位于 Scrapy 引擎 和 下载器 之间的一层组件,负责处理每个 请求 和 响应。它提供了一种机制,让开发者可以对请求和响应进行自定义处理,以满足不同场景下的特殊需求。功能包括请求处理、响应处理、请求重试、请求和响应的统计、绕过网站反爬机制、数据压缩和解压、自定义错误处理和流量控制等。
# Enable or disable extensions
# See https://docs.scrapy.org/en/latest/topics/extensions.html
#EXTENSIONS = {
# "scrapy.extensions.telnet.TelnetConsole": None,
#}
配置扩展,Scrapy 允许使用扩展功能来增强爬虫的功能,比如监控爬虫的运行状态、提供额外的命令行工具等。
# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
#ITEM_PIPELINES = {
# "douban.pipelines.DoubanPipeline": 300,
#}
项管道是 Scrapy 用于处理爬虫抓取的数据(即 Item)的一个重要组件。它允许开发者定义如何处理抓取到的 Item,例如清洗、验证、存储等。Scrapy 使用一个字典格式来配置项管道。字典的键是管道的路径,值是管道的执行优先级(数字越小优先级越高)。通过 ITEM_PIPELINES 配置,开发者可以定义如何处理抓取到的 Item,包括清理、存储、验证等操作。
# Enable and configure the AutoThrottle extension (disabled by default)
# See https://docs.scrapy.org/en/latest/topics/autothrottle.html
#AUTOTHROTTLE_ENABLED = True
# The initial download delay
#AUTOTHROTTLE_START_DELAY = 5
# The maximum download delay to be set in case of high latencies
#AUTOTHROTTLE_MAX_DELAY = 60
# The average number of requests Scrapy should be sending in parallel to
# each remote server
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# Enable showing throttling stats for every response received:
#AUTOTHROTTLE_DEBUG = False
AutoThrottle 是 Scrapy 的一个功能,旨在根据服务器的响应时间和负载动态调整请求的下载延迟,从而避免对目标网站造成过大压力。该配置项设定了 Scrapy 开始下载时的初始延迟(单位为秒)。在启用 AutoThrottle 后,初始延迟会影响首次请求的发送时间。
#AUTOTHROTTLE_MAX_DELAY = 60——如果服务器的响应时间较长,AutoThrottle 将会根据该配置设定的最大延迟来调整下载速度。在此例中,最大延迟为 60 秒。AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0——:该配置项设定了 Scrapy 希望并行发送给每个远程服务器的平均请求数。在此例中,设置为 1.0 意味着每次仅发送一个请求。
# Enable and configure HTTP caching (disabled by default)
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
#HTTPCACHE_ENABLED = True
#HTTPCACHE_EXPIRATION_SECS = 0
#HTTPCACHE_DIR = "httpcache"
#HTTPCACHE_IGNORE_HTTP_CODES = []
#HTTPCACHE_STORAGE = "scrapy.extensions.httpcache.FilesystemCacheStorage"
Scrapy 提供了 HTTP 缓存的功能,允许在爬虫运行时缓存已下载的页面,以避免重复请求同一 URL,从而提高效率和节省带宽。该功能默认是关闭的。#HTTPCACHE_ENABLED = True——这行代码用于启用 HTTP 缓存。如果取消注释并将其设置为 True,Scrapy 将开始缓存 HTTP 响应。默认情况下,此项为 False,表示缓存功能是关闭的。#HTTPCACHE_EXPIRATION_SECS = 0——这是缓存的过期时间设置(以秒为单位)。如果设置为 0,表示缓存永不过期,响应将一直保留在缓存中。开发者可以根据需要调整此值,以控制缓存的有效期,设置为 3600 例如表示缓存有效期为 1 小时。#HTTPCACHE_DIR = "httpcache"——指定缓存存储的目录。默认情况下,Scrapy 将缓存存储在当前工作目录下的 httpcache 文件夹中。如果取消注释,可以自定义此目录,方便管理和访问缓存文件。#HTTPCACHE_IGNORE_HTTP_CODES = []——这是一个列表,用于指定在缓存中应忽略的 HTTP 状态码。例如,如果设置为 [404, 500],那么 Scrapy 在接收到这些状态码的响应时,将不会将其缓存。默认情况下,该列表为空,表示所有状态码都将被缓存。#HTTPCACHE_STORAGE = "scrapy.extensions.httpcache.FilesystemCacheStorage"——这行代码指定了缓存存储的方式。默认情况下,Scrapy 使用文件系统缓存(FilesystemCacheStorage),即将响应缓存存储在文件中。开发者可以根据需要选择不同的存储后端,比如数据库等,只需替换这个值。