Scrapy安装失败主因是cryptography和twisted需编译C扩展,Windows缺VS Build Tools;应升级pip、安装wheel,再用--only-binary=all从清华源安装。

Scrapy 安装失败报错 error: Microsoft Visual C++ 14.0 or greater is required
Windows 上直接 pip install scrapy 大概率卡在这儿——Scrapy 依赖的 cryptography 和 twisted 需要编译 C 扩展,而默认没装 VS Build Tools。
最稳的解法是跳过源码编译,用预编译轮子:
- 先升级 pip:
python -m pip install --upgrade pip - 再装 wheel:
pip install wheel - 最后指定清华源、强制用二进制包:
pip install --only-binary=all scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple/
Mac/Linux 用户如果遇到 fatal error: Python.h: No such file or directory,说明缺 Python 开发头文件,Ubuntu/Debian 要补:sudo apt-get install python3-dev;macOS 用 xcode-select --install 装命令行工具即可。
创建 Scrapy 项目时提示 Command not found: scrapy
不是安装失败,而是环境没激活或路径没生效。Scrapy 的 scrapy 命令是安装后生成的可执行脚本,位置取决于你的 Python 环境。
立即学习“Python免费学习笔记(深入)”;
确认方式和修复步骤:
- 查已安装包:
pip show scrapy,看Location路径 - 进该路径下的
Scripts(Windows)或bin(macOS/Linux),看有没有scrapy文件 - 如果在虚拟环境中,必须先
source venv/bin/activate(macOS/Linux)或venv\Scripts\activate(Windows) - 全局安装但命令仍不可用?把 Python 的
Scripts或bin目录加进系统PATH
别用 python -m scrapy 代替——它不等价,会报 No module named scrapy.cmdline。
运行 scrapy crawl example 报 ImportError: No module named 'scrapy'
这说明当前 Python 解释器找不到 Scrapy,常见于:在项目根目录外执行命令、或用了错误的 Python 解释器。
关键检查点:
- 确保你在
scrapy.cfg所在目录下运行命令(即scrapy startproject myproject生成的那个顶层目录) - 运行
which python(macOS/Linux)或where python(Windows),确认和你装 Scrapy 的是同一个环境 - 如果用 PyCharm,检查右下角解释器是否指向你
pip install scrapy的那个环境,而不是系统自带的 - 临时验证:在项目目录下跑
python -c "import scrapy; print(scrapy.__version__)",能打印版本号才算真就位
Scrapy 是异步框架吗?为什么不用 asyncio?
Scrapy 底层用的是 Twisted,不是 asyncio,所以它本身不兼容 async/await 语法。这不是缺陷,而是设计取舍:Twisted 更成熟、对爬虫场景(大量短连接、DNS、重试、中间件链)做了深度优化。
这意味着:
- 你不能在
parse方法里直接写await aiohttp.get(...),会报RuntimeWarning: coroutine ... was never awaited - 想发异步请求?老实用 Scrapy 自带的
scrapy.Request,它自动走 Twisted 的 reactor - 真要混用 asyncio(比如调外部 SDK),得用
deferToThread或inlineCallbacks包一层,但大概率没必要,还容易阻塞 reactor - 性能上,Scrapy 单机并发 100+ request 很轻松;硬切 asyncio 反而可能因事件循环冲突掉速
别被“异步”字面迷惑——Scrapy 的异步是隐式的、框架托管的,你写的代码看起来是同步风格,实际全在线程安全的事件循环里跑。这点最容易想当然,然后卡半天。










