Skip to content

Scrapy settings

settings.py 是 Scrapy 项目的全局配置中心。

很多初学者学 Scrapy 时,只盯着 Spider 文件写 XPath,却忽略了配置的重要性。结果就是:

  • 抓取太慢
  • 抓取太快被封
  • 请求头不对
  • Cookie 行为不符合预期

所以真正做爬虫项目时,Spider 只是“抓取逻辑”,而 settings.py 决定了这个项目“以什么方式去抓”。

本节目标

  • 理解 settings.py 在 Scrapy 中的作用
  • 理解并发、延迟、请求头、Cookie 的基础配置
  • 知道哪些配置最常用
  • 理解为什么配置和抓取稳定性直接相关

为什么 settings.py 很重要

如果把 Spider 比作“做什么”,那么 settings.py 更像是“怎么做”。

例如:

  • 一次同时发多少请求
  • 请求之间要不要间隔
  • 要不要带默认请求头
  • 要不要启用 Cookie
  • 要不要开启 Pipeline

这些都不是某个单独 Spider 的细节,而是整个项目的基础行为。

settings.py 在哪里

当你创建 Scrapy 项目后,会有这样一个文件:

text
myspider/settings.py

这个文件中集中管理项目配置。

并发配置

并发直接影响抓取速度。

常见相关配置示例:

python
CONCURRENT_REQUESTS = 16

它的意思是:

  • Scrapy 同时可以处理的请求数量大致为 16

并发高有什么影响

优点:

  • 速度更快

风险:

  • 更容易给目标网站造成压力
  • 更容易被识别成异常访问

所以并发不是越高越好。

请求延迟

很多站点不欢迎高频率抓取,所以通常需要增加请求间隔。

python
DOWNLOAD_DELAY = 1

这表示:

  • 每次请求之间大约间隔 1 秒

为什么延迟很重要

因为如果你像机器一样毫无间隔地狂发请求,很容易:

  • 被限速
  • 被封 IP
  • 被返回验证码页

随机化延迟

有些场景下,固定延迟也会显得太机械。

python
RANDOMIZE_DOWNLOAD_DELAY = True

这表示:

  • 在设定延迟基础上做一定随机波动

这样更像正常用户访问行为。

请求头配置

默认请求头决定了爬虫对外表现得像不像一个正常浏览器。

常见写法:

python
DEFAULT_REQUEST_HEADERS = {
    "User-Agent": "Mozilla/5.0",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
}

最重要的请求头之一:User-Agent

如果你完全不设置它,有些网站会很敏感。

所以大多数项目里都会至少先配一个合理的浏览器标识。

Robots 协议配置

python
ROBOTSTXT_OBEY = False

这个配置控制 Scrapy 是否遵循目标站点的 robots.txt 规则。

零基础阶段你要知道它存在,但也要注意:

  • 做抓取前要有基本合规意识
  • 不是什么网站都应该随意抓

默认情况下,Scrapy 通常会处理 Cookie。

你也可以显式配置:

python
COOKIES_ENABLED = True

如果某些场景你不希望自动带 Cookie,也可以关闭:

python
COOKIES_ENABLED = False

因为有些页面依赖登录状态或会话状态。

如果 Cookie 行为不符合预期:

  • 你可能抓到的是登录页
  • 你可能抓不到用户态内容

Pipeline 配置

如果你写了 pipelines.py 里的数据处理逻辑,要在 settings.py 中启用。

例如:

python
ITEM_PIPELINES = {
    "myspider.pipelines.MyspiderPipeline": 300,
}

如果不启用,Pipeline 写了也不会执行。

中间件配置

如果你写了下载中间件,也要在配置中启用。

例如:

python
DOWNLOADER_MIDDLEWARES = {
    "myspider.middlewares.MyspiderDownloaderMiddleware": 543,
}

这在:

  • 动态请求头
  • 代理
  • Selenium 对接

这些场景里很常见。

日志级别

Scrapy 的日志很多,初学者有时会被日志刷屏搞乱。

你可以设置日志级别:

python
LOG_LEVEL = "INFO"

常见值有:

  • DEBUG
  • INFO
  • WARNING
  • ERROR

一个适合入门项目的基础配置示例

python
BOT_NAME = "myspider"

SPIDER_MODULES = ["myspider.spiders"]
NEWSPIDER_MODULE = "myspider.spiders"

ROBOTSTXT_OBEY = False

CONCURRENT_REQUESTS = 8
DOWNLOAD_DELAY = 1
RANDOMIZE_DOWNLOAD_DELAY = True

COOKIES_ENABLED = True

DEFAULT_REQUEST_HEADERS = {
    "User-Agent": "Mozilla/5.0",
}

LOG_LEVEL = "INFO"

这个配置的思路是:

  • 不追求极限速度
  • 先追求稳定和可理解
  • 让请求更像普通浏览器

配置时的思路

settings.py 不能只是背变量名,你要建立判断逻辑。

如果抓取太慢

考虑:

  • 并发是不是太低
  • 延迟是不是过大

如果容易被封

考虑:

  • 并发是不是太高
  • 请求是不是太密集
  • 请求头是不是太单一

如果结果不对

考虑:

  • Cookie 是否启用
  • 请求头是否正确
  • 某些中间件或 Pipeline 是否生效

常见错误

1. 只改 Spider,不看 settings

很多抓取问题根本不是 XPath 问题,而是配置问题。

2. 一上来就把并发调很高

高并发不代表高质量,只会更快暴露异常行为。

3. 写了 Pipeline 和中间件却没启用

这是初学者非常常见的错误。

4. 看到配置很多就想一次全背

不需要。先掌握最核心的:

  • 并发
  • 延迟
  • 请求头
  • Cookie
  • Pipeline

练习题

练习 1

在自己的 Scrapy 项目中,把并发改成 8

练习 2

设置请求延迟为 1 秒。

练习 3

给项目加一个默认 User-Agent

练习 4

写一个简单 Pipeline,并在 settings.py 中启用它。

练习 5

自己总结:如果一个爬虫“太快、太乱、太像机器”,你会优先看哪些配置。

本节小结

settings.py 的核心意义,是控制整个 Scrapy 项目的全局行为。

你这一节最重要的收获应该是:

  • 知道配置决定抓取方式
  • 理解并发、延迟、请求头、Cookie 的作用
  • 知道 Pipeline 和中间件需要配置启用
  • 明白速度、稳定性和反爬风险之间存在权衡

只要这层意识建立起来,后面做 Scrapy 项目就不会只停留在“Spider 能跑就行”。

Built with VitePress.