如何使用Python Scrapy的CrawlSpider实现全站自动化爬取?

夏宇君_2586

夏宇君_2586

2026-07-23

246人浏览

原创

CrawlSpider通过Rule和LinkExtractor实现自动链接提取与跟进,需正确配置rules元组、allow正则(仅匹配路径)、follow与callback组合,并用scrapy genspider -t crawl生成模板以避免继承和导入错误。

如何使用python scrapy的crawlspider实现全站自动化爬取?

直接用 CrawlSpider 就能自动跟进链接,但多数人卡在规则写不对、follow 误设、回调函数名拼错这三处——不是框架不行,是配置没对齐页面真实结构。

如何生成正确结构的 CrawlSpider 模板

别手写类继承关系,scrapy genspider -t crawl 是唯一可靠起点。手动改 scrapy.Spider 到 CrawlSpider 容易漏掉 Rule 和 LinkExtractor 的 import,还会丢掉默认 rules 元组结构。

  • scrapy genspider -t crawl bookspider books.toscrape.com 生成的文件已预置 from scrapy.spiders import CrawlSpider, Rule 和 from scrapy.linkextractors import LinkExtractor
  • rules 必须是元组(末尾加逗号),写成列表或单个 Rule 不带括号会静默失效
  • allowed_domains 若留空或写错,Scrapy 会直接过滤掉所有跨域链接,哪怕你写了 follow=True

LinkExtractor 的 allow 正则为什么总不匹配

LinkExtractor 匹配的是 URL 路径片段,不是完整 URL。比如页面里有链接 /catalog/item/123,正则写 r'/catalog/item/\d+' 就行,不用加协议、域名或查询参数。

macOS UI 自动化技能包 —— 用 Python 控制你的 Mac
macOS UI 自动化技能包 —— 用 Python 控制你的 Mac

让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限

下载
  • 常见错误:写 r'https://example.com/catalog/item/\d+' —— 这会永远不命中,因为提取器只看路径部分
  • 调试技巧:先在 shell 里跑 response.css('a::attr(href)').getall(),挑几个真实链接,用 Python 的 re.search() 测试你的正则是否真能捕获
  • 支持 XPath/CSS 限定范围:LinkExtractor(restrict_xpaths='//div[@class="nav"]//a'),避免从页脚、广告等无关区域提取垃圾链接

callback 和 follow 的组合逻辑怎么设

callback 和 follow 是绑定在同一个 Rule 上的,不是全局开关。一个 Rule 处理一类链接,该不该继续往下爬,取决于这条规则本身。

  • follow=True 表示:对这个 Rule 提取出的每个链接,再用全部 rules 去匹配一遍(包括它自己),形成递归追踪
  • follow=False 表示:只解析当前页内容,不把提取出的链接喂给下一轮规则匹配
  • 典型分层场景:首页用 Rule 提取分类页(follow=True),分类页用另一个 Rule 提取详情页(follow=False),详情页只做数据提取不继续跳转
  • 回调函数名必须和 rules 里写的字符串完全一致,parse_item 写成 parseitem 或 parse_Item 都会导致静默跳过,无报错也无输出

为什么爬着爬着就停了,或者只爬了首页

最常被忽略的是 start_urls 页面本身没包含任何匹配 allow 的链接——CrawlSpider 不会主动扫描整个 DOM,它只处理 LinkExtractor 找到的链接,而这些链接又依赖于你写的正则和 restrict 参数。

  • 检查 start_urls 返回的 HTML,确认目标链接确实存在且结构符合你写的 restrict_xpaths 或 CSS 选择器
  • 禁用 ROBOTSTXT_OBEY = False,否则 robots.txt 可能屏蔽掉关键路径
  • 临时加 LOG_LEVEL = 'DEBUG',看日志里有没有 Filtered offsite request 或 Ignoring link 提示,这是最直接的线索
  • CrawlSpider 默认不处理 start_urls 页面的内容,除非你单独写一个 Rule 匹配它自身(比如 Rule(LinkExtractor(allow=r'^/$'), callback='parse_home', follow=True))

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1851

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4964

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1789

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

29797

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3547

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3567

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1223

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

616

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2763

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习