Skip to content

爬虫

学到这里,你已经开始从“等待别人给你数据”,进入“主动获取网络数据”的阶段。

爬虫不是简单地“把网页扒下来”,它更像是一套完整的数据获取流程。你需要同时理解:

  • 请求是怎么发出去的
  • 服务器返回了什么
  • 页面里的数据藏在哪里
  • 如何把需要的数据提取出来
  • 如何保存到文件或数据库
  • 如何处理反爬限制

所以这一阶段的学习,不只是学几个库,而是在训练你对网络数据流动的整体理解。

本阶段目标

  • 理解爬虫的基本工作原理
  • 理解 HTTP 请求和响应
  • 学会使用 urllibrequests
  • 学会解析 HTML 和 JSON 数据
  • 学会使用 Scrapy 搭建结构化爬虫项目
  • 理解常见反爬机制和应对思路
  • 为后面的数据采集、数据分析、自动化任务打基础

什么是爬虫

你可以先把爬虫理解成一个“自动访问网页并提取数据的程序”。

例如,浏览器访问一个页面时会做这些事情:

  1. 向服务器发请求
  2. 服务器返回 HTML、JSON、图片、脚本等内容
  3. 浏览器把这些内容解析并显示出来

爬虫做的事情其实很像,只是:

  • 浏览器是为了“给人看”
  • 爬虫是为了“给程序取数据”

所以爬虫的核心目标不是渲染漂亮页面,而是找到你真正想要的数据。

为什么 Python 学习者通常都会学爬虫

因为爬虫能把很多前面学过的内容全部用起来:

  • Python 语法
  • 字符串处理
  • 列表和字典
  • 正则表达式
  • 文件读写
  • JSON 处理
  • 数据库存储
  • 前端页面结构
  • HTTP 网络知识

而且它的反馈很直接。你写一段程序,抓下来一批数据,立刻就能看到成果。这对初学者建立成就感很有帮助。

爬虫到底在抓什么

很多新手会误以为“网页上能看到的内容,爬虫就一定能直接拿到”。这不一定对。

你真正能抓到什么,要看数据是通过什么方式到达页面的。

常见情况有三种:

1. 数据直接写在 HTML 里

这种最简单。你请求页面后,返回的 HTML 源码里就已经包含目标数据。

2. 数据通过接口返回

有些页面只是一个壳,真正的数据是通过 JavaScript 再去请求接口得到的。此时你应该研究接口,而不是只盯着 HTML。

3. 数据经过 JavaScript 计算或加密

这种就复杂一些,你可能需要研究页面脚本、请求参数、签名逻辑,甚至用浏览器自动化工具辅助。

本阶段的学习主线

这一阶段建议你按一条非常清晰的主线学习,不要乱跳:

  1. 先理解 HTTP
  2. 再学发请求
  3. 再学解析响应
  4. 再学结构化框架
  5. 最后再学反爬和部署

这条顺序不能反。因为如果你连请求和响应都没搞明白,直接学 Scrapy 只会觉得命令很多、文件很多、逻辑很乱。

推荐学习顺序

建议按下面顺序往下学:

  1. 爬虫基础与HTTP
  2. urllib与requests
  3. 解析器的使用
  4. Scrapy框架
  5. Scrapy settings
  6. Scrapy实战
  7. Redis扩展与分布式
  8. Scrapy部署
  9. 常见反爬与JS处理

每一部分到底在学什么

1. 爬虫基础与 HTTP

这一部分会解决一个根问题:网页和服务器到底是怎么通信的。

你会接触这些内容:

  • 请求方法
  • 请求头
  • 状态码
  • 响应体
  • Cookie
  • HTTPS

如果这一部分不清楚,后面你调接口时会一直是蒙的。

2. urllibrequests

这部分是“发请求”的基本功。

你会学到:

  • 如何发送 GET 请求
  • 如何发送 POST 请求
  • 如何携带参数
  • 如何带请求头
  • 如何带 Cookie
  • 如何设置代理

它决定了你能不能把数据真正拿回来。

3. 解析器的使用

拿到响应后,不代表工作结束。你还得把目标数据从杂乱的页面或接口内容里提取出来。

这部分通常会用到:

  • lxml
  • XPath
  • JSON 解析
  • jsonpath

这一部分决定了你能不能精准取到想要的字段。

4. Scrapy 框架

如果只是抓一两个页面,用 requests 可能就够了。但当你要抓很多页面、很多链接、很多详情页时,手写脚本会越来越乱。

这时就需要 Scrapy 这种结构化框架。

它帮你解决:

  • 请求调度
  • 数据提取
  • 管道处理
  • 中间件扩展
  • 项目结构组织

5. Scrapy settings

很多同学学 Scrapy 只盯着 spider 文件,却忽略了配置文件的重要性。

实际上,并发数、下载延迟、请求头、Cookie、重试机制,这些都会影响你的爬虫是否稳定。

6. Scrapy 实战

这一部分会让你开始接触更真实的问题,比如:

  • 随机请求头
  • 中间件
  • Selenium 配合
  • 动态页面处理
  • POST 请求抓取

7. Redis 扩展与分布式

当采集量变大以后,你可能要考虑:

  • 请求队列如何共享
  • 多台机器如何协同抓取
  • 数据如何统一管理

这就是 Redis 在爬虫阶段的重要价值。

8. Scrapy 部署

本地跑通不代表工作结束。你还要学会让爬虫在服务器上持续运行、远程管理、定时执行。

9. 常见反爬与 JS 处理

真正做项目时,网站通常不会欢迎你无限制抓取。

所以你必须逐步理解:

  • 请求头校验
  • Referer 检查
  • Cookie 验证
  • 动态参数
  • JavaScript 混淆
  • 验证码
  • IP 限制

注意,这一部分不是让你“暴力破解一切”,而是让你理解现实场景里为什么会抓不到数据,以及该如何分析问题。

做爬虫时要形成的正确思路

零基础阶段最重要的,不是一下子记住多少 API,而是形成正确分析路径。

看到一个页面时,你应该先问自己:

  1. 数据在 HTML 里,还是在接口里
  2. 请求是 GET 还是 POST
  3. 请求头里有没有关键字段
  4. 数据是文本、JSON,还是动态渲染出来的
  5. 抓到的数据准备存到哪里

只要你能带着这些问题看页面,学习效率会高很多。

爬虫和数据库、前端的关系

这一点一定要打通,不要把各个阶段割裂开。

爬虫和前端

你抓网页,本质上就是在分析 HTML、CSS 选择关系、JavaScript 请求逻辑,所以前端知识会直接帮助你定位数据来源。

爬虫和数据库

你抓到数据以后,总要保存。常见去向包括:

  • 文本文件
  • CSV 文件
  • MySQL
  • Redis
  • MongoDB

所以数据库能力会直接影响你的爬虫工程化程度。

爬虫和 Django

很多实际项目里,爬虫负责采集数据,Django 负责展示和管理数据。这两者经常是配合关系,不是互斥关系。

常见误区

1. 一上来就想抓复杂网站

如果你连最简单的静态页面都没抓顺,就不要急着碰强反爬网站。

2. 只会复制现成脚本

抄代码当然能短期跑起来,但你一定要能说清楚:

  • 请求发给了谁
  • 参数从哪里来
  • 数据为什么能取到
  • 为什么某些时候会失败

3. 只学 requests,不学 HTTP

如果你只会写 requests.get(),却不知道请求头、状态码、Cookie、会话机制,那你的爬虫能力会停在很浅的层面。

4. 遇到反爬就只会怀疑“代码不对”

很多时候不是代码语法错了,而是目标网站增加了校验机制。你要学会用浏览器开发者工具去分析请求过程。

学完这一阶段后,你应该具备什么能力

如果你把这一阶段真正学扎实,至少应该做到:

  • 能分析一个网页的数据来源
  • 能用 requests 抓接口或页面
  • 能用解析器提取目标字段
  • 能把数据保存到文件或数据库
  • 能写简单的 Scrapy 项目
  • 能排查一些基础反爬问题

这时候你就已经不是“只会写练习题”的状态了,而是开始具备网络数据采集能力。

本阶段小结

爬虫阶段的核心,不是让你背多少库,而是让你建立一套完整的数据获取思维:

  • 请求怎么发
  • 数据怎么来
  • 内容怎么取
  • 结果怎么存
  • 问题怎么查

只要这条主线建立起来,后面你无论是做内容采集、商品采集、接口分析,还是给自己的项目准备数据,都会有很强的实战价值。

Built with VitePress.