Python 爬虫工具链与环境搭建
前置知识
本文基于模型知识整理,建议核对官方文档(见 参考资料)。
一句话定义
一套以 Python 为核心的采集工具链:requests(请求)+ lxml/BS4(解析)+ Playwright(渲染)+ Scrapy(框架)+ pandas/SQLite(落地),配合隔离的虚拟环境与三个官方练习站。
为什么重要
工具选错会加倍返工:该用接口解析的场景上了浏览器自动化(慢 10 倍),该用框架的场景堆脚本(不可维护)。本篇给出选型地图与环境基线,后续每篇直接复用。
前置知识
kp-001、kp-002、kp-003;Python 安装经验。
核心概念
| 工具 | 角色 | 何时用 |
|---|---|---|
| requests | HTTP 客户端 | 静态页与接口(默认首选) |
| lxml / BeautifulSoup | HTML 解析 | 有现成 HTML、选择器抽取 |
| parsel | 选择器(Scrapy 同款) | 想统一 XPath/CSS 语法 |
| Playwright / Selenium | 浏览器自动化 | 渲染后才有数据、需交互 |
| Scrapy | 采集框架 | 多页面、需调度去重管道的正式项目 |
| aiohttp / httpx | 异步 HTTP | 自建高并发下载器 |
| pandas / SQLite / Parquet | 落地与分析 | 清洗、入库、统计 |
| mitmproxy | 中间人抓包 | 分析 App 与复杂站点流量 |
| Chrome DevTools | 浏览器内分析 | 日常第一入口 |
原理与机制
环境基线(每个项目独立隔离,绝不全局裸装):
mkdir my-crawler && cd my-crawler
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install requests lxml beautifulsoup4 playwright pandas
python -m playwright install chromium # Playwright 需另装浏览器内核
pip freeze > requirements.txt # 锁定版本,保证可复现
三个零成本合法练习场(专为爬虫学习而设,可放心练手):
httpbin.org:回显请求,用于验证头部/Cookie/方法。books.toscrape.com:静态列表页,练选择器与翻页。quotes.toscrape.com:含登录与 JS 版本,练会话与渲染。
实例或案例
同一需求的选型对照:抓 1000 个静态商品页 → requests + lxml,半小时完成;同站改版为 SPA → 先抓包找接口(kp-014),接口拿不到再上 Playwright(kp-013);演变为长期多站点监控 → 迁移到 Scrapy(kp-018)。路线永远是:接口优先于渲染,脚本够用不上框架。
常见误区
- 误区一:全局 pip 装包。 版本互相污染、无法复现;venv 是底线,requirements.txt 是交接礼仪。
- 误区二:默认首选 Playwright。 浏览器实例占内存数百 MB、速度慢一个数量级;只在接口不可得时使用。
- 误区三:跳过 DevTools 学习。 80% 的采集分析在 DevTools 的 Network 面板完成,这是比任何库都常用的工具。
自测题
- 新项目第一步装包前要做什么?
答:创建并激活 venv,之后所有安装都限定在项目环境内,最后 freeze 固化依赖。
- 什么时候才值得动用浏览器自动化?
答:确认数据由 JS 渲染(kp-012 的判别法)且抓包(kp-014)找不到可直连的接口时。
- 列出三个练习站及各自用途。
答:httpbin 验证请求、books 练静态解析翻页、quotes 练登录会话与渲染。
与其他知识点的关系
kp-006/kp-007 是 requests 与解析的深潜;kp-013/kp-018 分别展开 Playwright 与 Scrapy;kp-011 依赖本篇装好的 pandas/SQLite。
延伸阅读
各工具官方文档首页:requests、Scrapy、Playwright Python 版;requests 官方的 quickstart。