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 项目后,会有这样一个文件:
myspider/settings.py这个文件中集中管理项目配置。
并发配置
并发直接影响抓取速度。
常见相关配置示例:
CONCURRENT_REQUESTS = 16它的意思是:
- Scrapy 同时可以处理的请求数量大致为 16
并发高有什么影响
优点:
- 速度更快
风险:
- 更容易给目标网站造成压力
- 更容易被识别成异常访问
所以并发不是越高越好。
请求延迟
很多站点不欢迎高频率抓取,所以通常需要增加请求间隔。
DOWNLOAD_DELAY = 1这表示:
- 每次请求之间大约间隔 1 秒
为什么延迟很重要
因为如果你像机器一样毫无间隔地狂发请求,很容易:
- 被限速
- 被封 IP
- 被返回验证码页
随机化延迟
有些场景下,固定延迟也会显得太机械。
RANDOMIZE_DOWNLOAD_DELAY = True这表示:
- 在设定延迟基础上做一定随机波动
这样更像正常用户访问行为。
请求头配置
默认请求头决定了爬虫对外表现得像不像一个正常浏览器。
常见写法:
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 协议配置
ROBOTSTXT_OBEY = False这个配置控制 Scrapy 是否遵循目标站点的 robots.txt 规则。
零基础阶段你要知道它存在,但也要注意:
- 做抓取前要有基本合规意识
- 不是什么网站都应该随意抓
Cookie 配置
默认情况下,Scrapy 通常会处理 Cookie。
你也可以显式配置:
COOKIES_ENABLED = True如果某些场景你不希望自动带 Cookie,也可以关闭:
COOKIES_ENABLED = FalseCookie 为什么重要
因为有些页面依赖登录状态或会话状态。
如果 Cookie 行为不符合预期:
- 你可能抓到的是登录页
- 你可能抓不到用户态内容
Pipeline 配置
如果你写了 pipelines.py 里的数据处理逻辑,要在 settings.py 中启用。
例如:
ITEM_PIPELINES = {
"myspider.pipelines.MyspiderPipeline": 300,
}如果不启用,Pipeline 写了也不会执行。
中间件配置
如果你写了下载中间件,也要在配置中启用。
例如:
DOWNLOADER_MIDDLEWARES = {
"myspider.middlewares.MyspiderDownloaderMiddleware": 543,
}这在:
- 动态请求头
- 代理
- Selenium 对接
这些场景里很常见。
日志级别
Scrapy 的日志很多,初学者有时会被日志刷屏搞乱。
你可以设置日志级别:
LOG_LEVEL = "INFO"常见值有:
DEBUGINFOWARNINGERROR
一个适合入门项目的基础配置示例
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 能跑就行”。