讲师中心 微信公众号
AI工具推荐 视频效率加速

Scrapy爬虫实战:如何正确跟随链接并提取深层页面数据

轻辰君_1280

轻辰君_1280

发布时间:2026-07-28 18:44:34

|

825人浏览过

|

来源于php中文网

原创

Scrapy爬虫实战:如何正确跟随链接并提取深层页面数据

本文详解Scrapy中response.follow()的正确用法,通过分离页面导航与数据解析逻辑,解决“能翻页但不返回数据”的常见问题,并以FIFA Index球员数据抓取为例,提供可运行的结构化代码方案。

本文详解scrapy中`response.follow()`的正确用法,通过分离页面导航与数据解析逻辑,解决“能翻页但不返回数据”的常见问题,并以fifa index球员数据抓取为例,提供可运行的结构化代码方案。

在使用Scrapy进行多层级网页抓取时,一个典型误区是将链接遍历(navigation)与数据提取(extraction)混在同一解析方法中——这正是原代码无法返回任何数据的根本原因。原parse()方法试图在列表页中直接提取球员详情页的数据,但此时response对象仍指向列表页HTML,其CSS选择器自然无法命中详情页的h5.card-header或span.data-units等元素,导致.get()始终返回None。

正确的做法是遵循Scrapy的职责分离原则:

  • parse() 负责发现并调度新请求(如球员详情页URL、下一页URL);
  • 专用解析方法(如parse_player())负责处理响应并提取数据,该方法接收的是目标详情页的完整response对象。

以下是修正后的完整、可运行的Scrapy Spider代码:

import scrapy

class FifaIndexPlayerSpider(scrapy.Spider):
    name = "fifa_players"
    allowed_domains = ["fifaindex.com"]

    def start_requests(self):
        # 使用原始URL(注意:&需为&,非&)
        url = "https://www.fifaindex.com/players/?gender=0&league=13&order=desc"
        yield scrapy.Request(url, callback=self.parse)

    def parse(self, response):
        # ✅ 步骤1:提取当前页所有球员详情页链接
        player_links = response.css("figure.player a::attr(href)").getall()
        for link in player_links:
            # ✅ 步骤2:使用 response.follow() 并指定专属回调函数
            yield response.follow(link, callback=self.parse_player)

        # ✅ 步骤3:提取并跟进“下一页”链接(支持分页)
        next_page = response.css("li.ml-auto a::attr(href)").get()
        if next_page:
            yield response.follow(next_page, callback=self.parse)

    def parse_player(self, response):
        # ✅ 此处 response 已是球员详情页,可安全提取
        name = response.css("h5.card-header::text").get()
        # 注意:weight 元素可能有多个,示例中取索引1(需根据实际HTML结构调整)
        weight_elements = response.css("span.data-units.data-units-metric::text").getall()
        weight = weight_elements[1] if len(weight_elements) > 1 else None

        yield {
            "name": name.strip() if name else None,
            "weight": weight.strip() if weight else None,
            "url": response.url  # 可选:记录来源URL便于调试
        }

关键要点说明:

  • response.follow() 的本质:它是 scrapy.Request 的便捷封装,自动继承Referer头、处理相对路径,并将目标响应传递给指定的callback函数。它不执行解析,仅发起请求。
  • 避免在列表页解析详情页数据:原代码中response.css("h5.card-header::text").get()在列表页执行,必然失败。必须确保解析逻辑位于处理目标页面的回调中。
  • CSS选择器健壮性:span.data-units.data-units-metric 中的类名需严格匹配(中间用.连接,非空格)。若页面结构变化,建议先用浏览器开发者工具验证选择器有效性。
  • 容错处理:添加.strip()和None检查,防止空白字符或缺失字段导致Pipeline报错。
  • 域名限制:设置allowed_domains = ["fifaindex.com"]可防止爬虫意外跳转至外部站点。

运行与导出:

启动爬虫并导出CSV:

智能网页爬虫
智能网页爬虫

智能网页数据采集器,自动识别页面结构,批量抓取列表/表格/详情页数据,支持导出JSON/CSV/Excel,内置反爬策略适配。

下载
scrapy crawl fifa_players -o players.csv

生成的players.csv将包含结构化姓名与体重数据,可直接用于分析或导入数据库。

⚠️ 注意事项:

  • FIFA Index网站可能有反爬机制(如User-Agent检测、频率限制),生产环境建议在settings.py中配置USER_AGENT、DOWNLOAD_DELAY及ROBOTSTXT_OBEY = False;
  • 若遇到403 Forbidden,需添加合法请求头(如'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)');
  • 遵守robots.txt及网站Terms of Service,合理控制爬取速率,尊重数据版权。

掌握这一“导航-解析”分离模式,是构建健壮Scrapy爬虫的核心基础——它让代码逻辑清晰、易于调试、便于扩展(例如后续增加身高、俱乐部等字段,只需修改parse_player即可)。

热门AI工具

更多
立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

相关专题

更多
免费爬虫工具有哪些
免费爬虫工具有哪些

免费爬虫工具有Scrapy、Beautiful Soup、ParseHub、Octoparse、Webocton Scriptly、RoboBrowser和Goutte。更多关于免费爬虫工具的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4513

2023.11.10

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

100

2026.09.30

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

100

2026.09.30

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

80

2026.09.30

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

60

2026.09.30

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

80

2026.09.29

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

280

2026.09.23

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

180

2026.09.23

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

140

2026.09.23

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Scrapy 官方文档与教程
Scrapy 官方文档与教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn