新手必看的 Scrapy 爬虫数据提取与调试实战指南

By | 最新修改:2025-11-11
目录 显示

1. 前言

本文是一篇关于 Scrapy 爬虫数据提取实践的新手入门教程。主要介绍如何从爬虫的响应正文提取数据,学会使用 CSS 选择器、正则表达式和 XPath 表达式,同时以 JSON Lines 格式导出到文件,最后自动化翻页获取更多的信息。

阅读完本文,您将解锁以下的知识:

  1. 进入和使用 Scrapy Shell 进行交互式的爬虫调试;
  2. 利用 CSS 选择器和 XPath 表达式提取数据;
  3. 如何应用正则表达式来提取你想要的内容;
  4. 了解 Request(请求对象) 和 Response(响应对象);
  5. JSONJSON Lines 两种数据保存格式;
  6. JSON Lines 与 JSON 区别;
  7. 如何跟踪链接实现自动翻页爬虫。

前面已经发布了一篇文章(Python Scrapy 爬虫框架入门教程)介绍了基本资料和基础应用:创建爬虫项目、创建和运行蜘蛛等,以及如何安装和使用 Python 的虚拟环境 VirtualEnv。

解析网页元素提取数据


2. 蜘蛛的基本运行逻辑

start() 方法(通过 scrapy.Request 对象)发出 HTTP 请求,到通过 scrapy.Response 对象实例来接收响应,再调用 parse() 方法来处理响应内容。

响应正文往往是结构化数据,如果响应体的内容是 HTML 代码,可根据需求利用蜘蛛类的 parse() 方法的参数同时也是对象 scrapy.Response 的实例 response 变量的元素选择器来提取信息。

总结起来就是,Scrapy的工作流程遵循经典的请求-响应模式:

  1. 通过scrapy.Request发起HTTP请求
  2. 接收scrapy.Response响应对象
  3. parse()方法中处理响应

关于 scrapy.Requestscrapy.Response 两个对象的更多解释,可参考 Scrapy 中文文档:

https://docs.scrapy.net.cn/en/latest/topics/request-response.html


3. 交互式调试:Scrapy Shell 的入门与进阶

官方文档建议在 Scrapy Shell 环境下学习如果提取数据,并且是最佳学习途径。

更多资料,请移步:https://docs.scrapy.net.cn/en/latest/topics/shell.html

更详细实用的使用教程:https://docs.scrapy.net.cn/en/latest/intro/tutorial.html#extracting-data

3.1. 基本概念

Scrapy Shell 是 Scrapy 提供的交互式控制台,用于快速测试数据提取规则。

在这里可以尝试诸多的 Scrapy API 的操作和行为,从而掌握这些能够在蜘蛛中用的方法和对象。

3.2. 什么是响应对象实例变量

官方文档的入门教程中,将介绍如何使用响应对象实例 response 提取 HTML 文本中的结构化数据。这里的 response 变量与蜘蛛代码中的 parse() 方法的同名参数变量是同一个变量,或者说都是 scrapy.Response 这个对象的实例,也就是说它们拥有的类属性和类方法是一致的。

3.3. Scrapy Shell 使用教程

3.3.1. 创建一个 Shell 会话

本文的命令行终端命令均在 VirtualEnv 虚拟环境下运行。

用法如下:

scrapy shell [url|file]
  • url 指的是远程文档的网址;
  • file 指的是电脑本地的文件的全路径。

也就是说,既可从远程文档,也可从本地特定文件的内容中获取数据。

更多的选项请参阅 HELP 文档: scrapy shell --help

官方文档的教程中,以远程 URL https://quotes.toscrape.com/page/1/ 为例,进入 Scrapy Shell:

scrapy shell "https://quotes.toscrape.com/page/1/"

执行上面命令将会出现类似下图的界面:

进入 Scrapy Shell
启动会话后,直接获取 request 和 response 对象。

3.3.2. 基本使用

进入 Scrapy Shell 即可使用之,可在 >>> 提示符后面输入想要运行的对象、属性、函数和方法等 Scrapy API。

比如:

执行 request 能够获取基本请求信息:

此次请求对象的信息

执行 response 能够获取 HTTP 响应的基本信息:

此次响应对象的信息

执行 response.status 获取当前响应的状态码,如 200、404 等:

获取响应状态码

200 表示当前 HTTP 请求并接收响应成功,而 response.body 则打印出响应体的文本。

response.attributesrequest.attributes 可分别获取所有它们拥有的类属性:

列出请求和响应对象的属性

RequestResponse 对象的更多资料,请移步:https://docs.scrapy.org/en/latest/topics/request-response.html

3.3.3. 退出当前会话

执行 quit() 函数即可退出 Scrapy Shell。


4. Scrapy 数据提取核心技术:CSS 与 XPath 选择器

Scrapy 数据提取工作原理其实不难理解,就是按用户的需求应用爬虫内置的 API 或者 Python 正则表达式把一项项数据解析出来。

比如:获取 HTML 文档中的某项内容,可以使用 Scrapy 提供的 CSS 或 XPath 选择器,两者都是爬虫系统内置的 API,也可以使用正则表达式,来获取想要的内容。

甚至可以用外部的库来解析内容,比如 BeautifulSoup。

本章节覆盖 CSS 选择器使用技巧,XPath 表达式应用案例,以及 Scrapy Shell 数据提取的调试方法详解。

4.1. 什么是 CSS 和 XPath

系统对 Scrapy 数据提取内置着两套方案,一是 CSS 选择器,另一个是 XPath 表达式,它们都是 Response 对象的方法,同时也是 scrapy.Selector 对象的方法。

接下来的文章内容开始大篇幅讲解如何使用上述的两套方案:

题外话

  1. 本文把 Scrapy 的官方文档中的入门教程以容易理解同时使用更多注解的方式编写出来,篇章比较长,但是可贵在于实用。
  2. 这是个优秀的爬虫框架,使用它来爬取网站或者 API 的内容,可以省下许多不必要的代码,从而做到 Python 哲学中的“Write less code, do more”信条。
  3. 本文所接触的仅是该爬虫框架能做的其中一点点,要想学习更多,还须继续耕耘和努力。
  4. 所有的一切都在官方文档中,要是你想更好地使用 Scrapy 来做爬虫,写最少的代码,做最多的事,那么有空就多看看文档,边用边学更好。
  5. 本文的先修课:Python Scrapy 爬虫框架入门教程

最后,非常感谢你看到文章最后笔者的啰嗦,祝用好!

(本文完)


程序知路

鉴于本人的相关知识储备以及能力有限,本博客的观点和描述如有错漏或是有考虑不周到的地方还请多多包涵,欢迎互相探讨,一起学习,共同进步。

本文章可以转载,但是需要说明来源出处!

本文使用的部分图片来源于网上,若是侵权,请与本文作者联系删除: admin@icxzl.com