Scrapy 核心配置与调试技巧
# Scrapy 核心配置与调试技巧
在深入学习数据处理和复杂爬取逻辑之前,掌握 Scrapy 的核心配置和调试工具是至关重要的。这能让你在开发过程中游刃有余,快速定位问题,并精确地控制爬虫的行为。本篇将聚焦于两大神器:交互式调试工具 scrapy shell
和项目的控制中心 settings.py
。
# 一、Scrapy Shell:交互式调试利器
scrapy shell
是一个非常强大的交互式终端,它允许你在不启动完整爬虫的情况下,对某个特定 URL 的响应进行分析和调试。当你需要反复试验 XPath 或 CSS 选择器时,它能为你节省大量时间。
# 1.1 如何启动
在你的项目根目录下(或任意位置),执行以下命令:
# 语法: scrapy shell <你要调试的URL地址>
scrapy shell http://duanzixing.com/
1
2
2
Scrapy 会下载该 URL 的内容,然后启动一个 Python 交互式环境。
# 1.2 Shell 中的可用对象
进入 Shell 后,Scrapy 会自动为你创建好几个非常有用的内置对象:
response
: 最重要的对象。它就是该 URL 下载成功后生成的Response
对象,你可以像在parse
方法中一样直接使用它,例如response.xpath(...)
。request
: 产生此response
的Request
对象。spider
: Scrapy 内部管理的一个基础Spider
对象。settings
: 当前 Scrapy 项目的配置信息。
# 1.3 常用调试命令
在 scrapy shell
中,你可以执行以下操作来高效调试:
# 1. 测试 XPath 选择器
# response.xpath() 返回的是一个 SelectorList 对象
>>> article_list = response.xpath('//article[@class="excerpt"]')
>>> article_list
[<Selector xpath='//article[@class="excerpt"]' data='<article class="excerpt">...'>, <Selector xpath='//article[@class="excerpt"]' data='<article class="excerpt">...'>, ...]
# 2. 提取数据
# 对 SelectorList 或 Selector 调用 .get() 或 .getall() 来提取真实数据
>>> first_title = article_list.xpath('./header/h2/a/text()').get()
>>> first_title
'你所谓的稳定,不过是在浪费生命'
# 3. 测试 CSS 选择器
>>> first_title_css = response.css('article.excerpt h2 a::text').get()
>>> first_title_css
'你所谓的稳定,不过是在浪费生命'
# 4. 在浏览器中查看当前响应 (非常有用!)
# 这个命令会自动在你的默认浏览器中打开一个本地临时文件,其内容就是当前 response 的内容
# 这对于检查页面结构、确认 Scrapy 是否拿到了正确的页面非常有帮助
>>> view(response)
True # 返回 True 表示成功打开
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
通过 scrapy shell
,你可以确保在编写爬虫代码前,你的提取逻辑是完全正确的。
# 二、settings.py:项目的控制中心
settings.py
文件是 Scrapy 项目的配置文件,其中包含了控制整个项目行为的各种参数。合理的配置能让你的爬虫更高效、更稳定、更具伪装性。
以下是一些最常用且最重要的配置项:
# 2.1 身份与礼貌
配置项 | 默认值 | 描述 |
---|---|---|
USER_AGENT | 'Scrapy/版本号 (+https://scrapy.org)' | 【必改】 设置请求的用户代理(User-Agent)。默认的 UA 会明确暴露你是一个 Scrapy 爬虫,极易被网站屏蔽。务必将其修改为常见的浏览器 UA,如 Chrome 或 Firefox 的。 |
ROBOTSTXT_OBEY | True | 【建议修改】 是否遵守目标网站的 robots.txt 协议。robots.txt 是网站所有者制定的君子协议,规定了允许哪些爬虫访问哪些页面。学习和开发阶段建议设置为 False ,但商业应用时请务必尊重该协议。 |
# settings.py
# 伪装成 Chrome 浏览器
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
# 学习阶段,暂时不遵守 robots.txt
ROBOTSTXT_OBEY = False
1
2
3
4
5
6
7
2
3
4
5
6
7
# 2.2 性能与延迟
配置项 | 默认值 | 描述 |
---|---|---|
CONCURRENT_REQUESTS | 16 | Scrapy 下载器可以并行处理的最大请求数。增加此值可以提高爬取速度,但也会给目标服务器带来更大压力,请谨慎设置。 |
DOWNLOAD_DELAY | 0 | 【重要】 下载延迟,单位是秒。Scrapy 在从同一个网站下载连续页面前应等待的时间。设置一个合理的延迟(如 1 或 2 )是对目标网站最基本的尊重,可以有效避免因请求过快而被封禁。 |
COOKIES_ENABLED | True | 是否启用 Cookie。如果为 True ,Scrapy 会自动记录服务器返回的 Cookie,并在后续请求中带上,对于需要维持登录状态的网站非常有用。 |
# settings.py
# 设置并发请求数为 8
CONCURRENT_REQUESTS = 8
# 设置下载延迟为 2 秒,做一个有礼貌的爬虫
DOWNLOAD_DELAY = 2
1
2
3
4
5
6
7
2
3
4
5
6
7
# 2.3 功能开关与请求头
配置项 | 默认值 | 描述 |
---|---|---|
DEFAULT_REQUEST_HEADERS | {...} | 全局默认的请求头。这是一个字典,你可以在这里添加除 User-Agent 外的其他请求头,例如 Accept-Language 。 |
ITEM_PIPELINES | {} | 用于启用和配置 Item Pipeline 的字典。键是 Pipeline 的路径,值(0-1000)代表其执行优先级,数字越小,优先级越高。 |
DOWNLOADER_MIDDLEWARES | {} | 用于启用和配置下载器中间件的字典。键是中间件的路径,值(0-1000)是其优先级。 |
# settings.py
# 设置默认请求头
DEFAULT_REQUEST_HEADERS = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
}
# 启用一个 Item Pipeline
ITEM_PIPELINES = {
'myproject.pipelines.MyProjectPipeline': 300,
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 2.4 日志配置
配置项 | 默认值 | 描述 |
---|---|---|
LOG_LEVEL | 'DEBUG' | 控制终端输出信息的最低日志级别。可选值有 CRITICAL , ERROR , WARNING , INFO , DEBUG 。通常设置为 INFO 或 WARNING 可以让输出更简洁。 |
LOG_FILE | None | 将日志信息输出到指定的文件。如果设置了此项,终端将不再打印日志。这对于记录爬虫长时间运行的状态非常有用。 |
# settings.py
# 只显示警告及以上级别的日志
LOG_LEVEL = 'WARNING'
# 将所有日志(无论级别)都写入到 my_spider.log 文件中
LOG_FILE = 'my_spider.log'
1
2
3
4
5
6
7
2
3
4
5
6
7
# 三、总结
scrapy shell
是你的瑞士军刀:在编写任何复杂的提取逻辑前,先用shell
验证你的 XPath 和 CSS 选择器。settings.py
是你的总控制台:务必修改USER_AGENT
和ROBOTSTXT_OBEY
,并根据需要设置DOWNLOAD_DELAY
来做一个友好的爬虫。通过调整日志级别和组件开关,你可以精确地控制爬虫的每一个方面。
编辑此页 (opens new window)
上次更新: 2025/07/27, 04:30:11