程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Python 基础

    • Python基础
  • Python 进阶

    • 装饰器与生成器
    • 异常处理
    • 标准库精讲
    • 模块与包
    • pip包管理工具
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
前端 (opens new window)
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Python 基础

    • Python基础
  • Python 进阶

    • 装饰器与生成器
    • 异常处理
    • 标准库精讲
    • 模块与包
    • pip包管理工具
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
前端 (opens new window)
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • Python 基础

  • Python 进阶

  • Python爬虫

  • Scrapy 爬虫框架

    • Scrapy 框架核心:深入理解其工作流程
    • Scrapy 入门实战:从零到一构建你的第一个爬虫
    • Scrapy核心对象:Response超详细指南
    • Scrapy 核心配置与调试技巧
      • 一、Scrapy Shell:交互式调试利器
        • 1.1 如何启动
        • 1.2 Shell 中的可用对象
        • 1.3 常用调试命令
      • 二、settings.py:项目的控制中心
        • 2.1 身份与礼貌
        • 2.2 性能与延迟
        • 2.3 功能开关与请求头
        • 2.4 日志配置
      • 三、总结
    • Scrapy Items与Pipeline数据管道
    • Scrapy 图片与文件下载
    • Scrapy 模拟登录与Cookie处理
    • Scrapy CrawlSpider全站爬取
    • Scrapy 中间件:请求与响应的强大控制器
    • Scrapy-Redis:从单机到分布式集群
  • Python
  • Scrapy 爬虫框架
scholar
2025-07-23
目录

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

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

通过 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.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 功能开关与请求头

配置项 默认值 描述
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.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

# 三、总结

  • scrapy shell 是你的瑞士军刀:在编写任何复杂的提取逻辑前,先用 shell 验证你的 XPath 和 CSS 选择器。
  • settings.py 是你的总控制台:务必修改 USER_AGENT 和 ROBOTSTXT_OBEY,并根据需要设置 DOWNLOAD_DELAY 来做一个友好的爬虫。通过调整日志级别和组件开关,你可以精确地控制爬虫的每一个方面。
编辑此页 (opens new window)
上次更新: 2025/07/27, 04:30:11
Scrapy核心对象:Response超详细指南
Scrapy Items与Pipeline数据管道

← Scrapy核心对象:Response超详细指南 Scrapy Items与Pipeline数据管道→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式