必须正确配置python解释器和launch.json:先用venv创建并激活环境、安装依赖,再在vscode中选择对应解释器路径;launch.json需设"module":"runpy"、"args"传参、"console":"integratedterminal";异步或子进程需调整调试类型和日志;网络问题要开debug日志、禁用ssl验证、设user-agent。

装对 Python 解释器,不是选“Python”扩展就完事
VSCode 调试 Python 爬虫前,必须确认工作区绑定了你实际用的 python 可执行文件,而不是系统默认或虚拟环境里没装 requests / beautifulsoup4 的那个。常见错误是点开命令面板(Ctrl+Shift+P)搜 “Python: Select Interpreter”,结果选了 /usr/bin/python3 或空环境,一跑 import requests 就报 ModuleNotFoundError。
实操建议:
- 在项目根目录建
venv:终端里运行python -m venv .venv - 激活后装依赖:
.venv/Scripts/activate(Windows)或source .venv/bin/activate(macOS/Linux),再pip install requests bs4 - VSCode 中按
Ctrl+Shift+P→ 输入Python: Select Interpreter→ 选中项目下的.venv/bin/python(或.venv/Scripts/python.exe) - 确认右下角状态栏显示的解释器路径含
.venv,且没标“unavailable”
launch.json 里 debug 配置不能只抄模板
直接用 VSCode 自动生成的 launch.json(比如选 “Python File”)往往缺关键字段,导致断点不生效、print 不输出、或根本起不来。核心问题在于没指定 module 模式或没传参——爬虫脚本常要带 URL 或参数启动,而默认配置只支持无参运行单个文件。
实操建议:
- 在项目根目录建
.vscode/launch.json,内容至少包含:{ "version": "0.2.0", "configurations": [ { "name": "Python: Current File (with args)", "type": "python", "request": "launch", "module": "runpy", "args": ["-m", "your_spider_module"], "console": "integratedTerminal", "justMyCode": true } ] } - 如果脚本叫
spider.py且直接运行(非模块导入),用"module": "runpy"+"args": ["-m", "spider"]更稳;若需传 URL,写成["-m", "spider", "https://example.com"] -
"console": "integratedTerminal"必须设,否则input()、进度条、或某些requests日志会卡住或不显示
断点失效?检查是不是在异步请求或子进程中
用 asyncio 写的爬虫(比如 aiohttp),或用了 multiprocessing 启子进程拉数据,VSCode 默认调试器根本进不去那些上下文——断点灰掉、F5 启动后直接跑完、变量窗口空空如也。这不是配置错,是调试模型不匹配。
实操建议:
- 纯
asyncio脚本:把launch.json的"type"改成"debugpy"(新版 Python 扩展已内置),并确保"justMyCode": false临时打开,方便定位事件循环入口 - 避免在子进程里打断点;改用
logging.debug()输出关键状态,或把逻辑抽成函数,在主进程里单步调用 - 如果用了
scrapy,别试图直接调试scrapy crawl xxx—— 它自己启 reactor,得用scrapy shell交互式测试提取逻辑,或在parse方法开头加breakpoint()
HTTP 请求被拦截或超时?调试时别忽略网络上下文
VSCode 调试状态下,requests 可能因代理、SSL 验证、User-Agent 被目标站拒绝,但错误堆栈常被吞掉或卡在底层,看起来像“断点没触发”或“程序假死”。这不是代码 bug,是运行时环境和生产不一致。
实操建议:
- 在脚本开头加
import logging; logging.basicConfig(level=logging.DEBUG),看requests底层是否发出请求、收到什么响应头 - 禁用 SSL 验证仅限本地调试:
requests.get(url, verify=False),同时补上import urllib3; urllib3.disable_warnings()避免警告刷屏 - 手动设
User-Agent:很多站反爬第一关就查这个,headers={"User-Agent": "Mozilla/5.0"}是最低成本绕过 - 别在断点停太久——有些网站会主动断连,后续请求直接 timeout;用
F10单步比长停更可靠
真正麻烦的是 JS 渲染页或登录态维持,这时候 VSCode 调试只是辅助,得配合浏览器开发者工具看 network 和 cookie,再把关键 token 或加密逻辑搬进 Python。调试器救不了所有问题,它只负责让你看清自己写的那部分怎么跑。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











