1. 爬虫是什么
这是什么:爬虫(Web Crawler / Web Scraper)是按规则自动访问网页、把需要的数据抠下来存起来的程序。你在网页上看到的每一段文字、每一张图片,本质上都是程序从某个网址(URL)下载回来的一段数据——爬虫只是把「人用浏览器看」换成「程序替你批量拿」。
为什么学:价格监控、舆情收集、比价榜单、给 AI 准备语料……数据在别人网站上躺着,手工复制粘贴既慢又漏;写一次爬虫脚本,以后一条命令随时重新采集。这一章先把原理吃透——原理懂了,框架只是帮你省代码。
如何用:先看浏览器和爬虫其实是同一个循环,再认识网页的两种形态,最后划清合规底线。
浏览器和爬虫,干的是同一件事
| 步骤 | 你用浏览器时 | 爬虫程序 |
|---|---|---|
| 1. 发请求 | 地址栏输入网址回车 | 代码向 URL 发 HTTP 请求 |
| 2. 收响应 | 服务器返回 HTML/JSON | 程序拿到字符串/字节 |
| 3. 解析 | 浏览器渲染成页面 | 代码从文本里提取数据 |
| 4. 跳转 | 你点下一个链接 | 程序把新 URL 排进队列 |
| 5. 保存 | 数据显示在屏幕上 | 程序把数据写进文件/数据库 |
核心是第 4 步:爬虫自己"点链接"——把发现的新 URL 放进一个队列,再逐个请求,循环往复,直到队列空了。这就是「爬」字的由来:像蜘蛛一样顺着链接丝线爬满整个网站。
一个最小可跑的爬虫(不用装任何库)
Python 标准库就能发请求。存成 first_look.py 运行:
from urllib.request import urlopen
html = urlopen("https://quotes.toscrape.com/").read().decode("utf-8")
print(len(html)) # 页面一共多少个字符
print(html[:300]) # 看看前 300 个字符长什么样
你会看到:几万到几十万的一个数字,和一段以 <!DOCTYPE html> 开头的文本——这就是网页的「真身」。浏览器做的渲染(颜色、布局、字体)全是装饰,数据本来就藏在这段文本里。quotes.toscrape.com 是一个专门给人练爬虫的沙盒站,欢迎抓取。
网页的两种形态:静态与动态
| 形态 | 数据在哪 | 怎么拿到 | 典型场景 |
|---|---|---|---|
| 静态页面 | 就写在 HTML 文本里 | 请求 URL → 解析 HTML 即可 | 博客、文档、新闻列表 |
| 动态页面 | HTML 是空壳,数据由 JS 再调接口取回 | 找到背后那个 JSON 接口,直接请求它 | 后台管理、信息流、评论区 |
判断方法:在页面上右键「查看网页源代码」(Ctrl+U),搜索你看到的某条数据——搜得到就是静态,搜不到就是动态。动态页别硬解析空壳 HTML,按 F12 打开开发者工具的 Network 标签,刷新页面,能找到返回 JSON 的接口(本教程第 3 章会实操一次)。
状态码:服务器的回话暗号
| 状态码 | 含义 | 爬虫该做什么 |
|---|---|---|
| 200 | 成功 | 正常解析 |
| 301 / 302 | 页面搬家了 | 跟着新地址走(requests 自动处理) |
| 403 | 服务器拒绝你 | 多半是没带浏览器身份(下一章配 User-Agent) |
| 404 | 页面不存在 | 从队列里丢弃这个 URL |
| 429 | 请求太频繁 | 立即降速,加 sleep 间隔 |
| 500 | 服务器自己坏了 | 稍后重试,别甩锅自己的代码 |
合规底线:动手前必读
爬虫技术本身中性,但采集行为有边界,三条原则请背下来:
- 只抓公开数据:不需要登录、没有加密混淆、任何人打开浏览器都能看的内容;不破解、不绕权限、不碰个人隐私信息
- 遵守 robots.txt:在网站域名后加
/robots.txt(如https://quotes.toscrape.com/robots.txt),这是站长写给爬虫的「预约须知」,声明了哪些路径欢迎爬、哪些谢绝 - 控制频率:加
time.sleep()让请求之间有间隔,并发别开大——你的脚本一秒轰几十次,等于对人家服务器发起小规模攻击
记忆口诀:爬虫五步——请求、响应、解析、入队、存储;合规三条——公开、robots、慢慢爬。
本教程的技术栈地图
| 层次 | 代表工具 | 本教程第几章 |
|---|---|---|
| 发请求 | requests / httpx | 第 2 章 |
| 解析页面 | BeautifulSoup4 / parsel | 第 3 章 |
| 存数据 | CSV / JSON / SQLite | 第 4 章 |
| 全能框架 | Scrapy | 第 5 章 |
| 分布式框架 | feapder | 第 6 章 |
| 异步框架 | Crawlee | 第 7 章 |
| JS 渲染(进阶) | Playwright | 第 7 章提及 |
动手改
- 把
html[:300]改成html[:1000],在文本里找找名言 "The world as we have created it..."——亲眼确认数据在 HTML 里 - 把 URL 换成
https://quotes.toscrape.com/robots.txt,读一读这个沙盒站的「预约须知」写了什么 - 试试一个不存在的地址(比如把域名手滑拼错),观察报错长什么样——下一章教你优雅地接住这些错
下一章:requests 抓第一个网页 🐸