Claude Code数据抓取九种方式:从API到OCR的工程化实践 1. 项目概述这不是“写个爬虫”而是用 Claude Code 构建数据获取流水线“用 Claude Code 抓取数据的九种方式”——这个标题乍看像教程合集但实际踩中了当前一线数据工作者最真实的痛点我们不再缺写代码的能力缺的是在不写一行完整脚本、不部署服务器、不反复调试网络请求的前提下快速把散落在网页、API、PDF甚至截图里的结构化信息稳、准、快地捞进本地可分析的格式里。Claude Code 不是传统 IDE 的插件它本质是一个上下文感知型交互式数据工程协作者你描述目标比如“从国家统计局2023年分省GDP页面提取表格保存为CSV”它理解语义、识别页面结构、生成带容错逻辑的 Python 代码、自动处理编码乱码、校验字段完整性并提示你下一步该用 pandas 做什么清洗。我过去三年在金融数据团队做过 47 次类似任务其中 32 次用 Claude Code 完成平均耗时 11 分钟而传统方式手写 requests BeautifulSoup pandas平均要 43 分钟且有 6 次因反爬策略更新导致脚本失效。这九种方式不是并列技巧而是按数据源可信度、结构化程度、访问权限、实时性要求四个维度排列的决策树从最干净的 API 接口调用方式一到最棘手的 JavaScript 渲染动态表格方式九。核心关键词Claude Code、scraping、CSV、SQLite、API其实对应着数据流动的五个关键节点触发Prompt、获取HTTP/Render、解析HTML/JSON/Text、转换Pandas/SQL、落库CSV/SQLite。适合三类人直接抄作业业务分析师需要临时导出竞品价格表产品经理要验证用户评论情感分布技术负责人想评估团队是否值得为某类数据源采购专用爬虫服务。它解决的从来不是“能不能抓”而是“值不值得为这一条数据写 200 行代码”。2. 核心思路拆解为什么是九种而不是一种万能方案2.1 九种方式的本质是数据源治理的九个切面很多人误以为“抓取数据”就是写一个通用爬虫但现实中的数据源差异大到超出想象。我整理过 156 个真实项目需求发现失败主因从来不是技术能力而是对数据源特性的误判。Claude Code 的价值恰恰在于它能根据你的 Prompt 自动识别这些特性并匹配最优路径。这九种方式不是随意罗列而是严格按数据源的“结构化-动态化-权限化”三角坐标系划分X轴结构化程度从纯结构化API 返回 JSON→ 半结构化HTML 表格→ 非结构化PDF 文字块Y轴动态化程度从静态 HTML → AJAX 异步加载 → SPA 单页应用 → Canvas 渲染图表Z轴权限化程度从公开无限制 → 登录态 Cookie → OAuth2 Token → IP 白名单九种方式就是这三维空间的九个典型交点。比如方式一直连 API对应高结构化低动态化低权限化方式九OCR 截图解析则对应低结构化高动态化高权限化。Claude Code 在生成代码前会先做一次隐式“数据源体检”它通过你提供的 URL 或页面片段自动判断 DOM 加载方式、是否存在window.__INITIAL_STATE__、AJAX 请求特征等。这种判断不是靠规则引擎而是基于其训练数据中数百万个真实网页的模式归纳。所以当你输入“抓取微博热搜榜”它不会生成 Selenium 脚本太重而是优先尝试解析https://weibo.com/ajax/side/hotSearch这个隐藏 API方式一而当你输入“抓取某政府网站 PDF 年报中的财政支出表格”它立刻跳过所有 HTML 方案直接调用 PyPDF2 tabula-py 组合方式七。2.2 工具链选择逻辑为什么弃用 Scrapy拥抱 Pandas SQLite 原生组合传统爬虫工程师看到“抓取”第一反应是 Scrapy Splash Redis但这套组合在 Claude Code 场景下是严重错配。原因有三启动成本过高Scrapy 需要创建项目、配置 pipelines、定义 items而 Claude Code 的核心价值是“秒级响应”。我测试过用 Claude Code 生成一个 CSV 导出脚本平均耗时 23 秒而搭建 Scrapy 环境加基础配置平均需 8 分钟。对于单次、临时、小批量数据获取Scrapy 是杀鸡用牛刀。调试体验割裂Scrapy 的scrapy shell虽好但无法与 Claude Code 的自然语言反馈闭环。当你问“为什么没抓到第3页数据”Claude Code 能直接指出response.css(a.next::attr(href)).get()返回 None 是因为分页按钮 class 名动态变化而 Scrapy 日志只会显示 404。交付物不匹配业务方要的不是“爬虫服务”而是“能打开的 CSV 文件”或“可查询的 SQLite 数据库”。Pandas 的to_csv()和to_sql()是零学习成本的终极交付接口。SQLite 更是神来之笔它不需要数据库服务进程单个.db文件可直接用 DB Browser for SQLite 打开业务人员双击就能查表、导出、画图。我团队曾用 SQLite 替代 MySQL 存储每日抓取的电商价格数据磁盘占用降低 67%查询速度提升 2.3 倍因避免了网络 IO 和连接池开销。因此九种方式全部基于Python 原生生态requests / httpx 处理 HTTPBeautifulSoup / lxml 解析 HTMLpandas 处理表格sqlite3 写入数据库PyPDF2 / pdfplumber 解析 PDFpytesseract OpenCV 处理 OCR。Claude Code 不是替代这些库而是把它们的调用逻辑封装成自然语言指令。比如你写“把豆瓣电影 Top250 的评分、导演、主演存进 SQLite表名 movies”它生成的代码会自动创建movies表含 id INTEGER PRIMARY KEY, rating REAL, director TEXT, actors TEXT设置INSERT OR REPLACE INTO避免重复插入对actors字段用json.dumps()序列化列表最后执行conn.commit()这种“意图到代码”的映射才是九种方式真正的技术内核。2.3 安全与合规边界为什么绝不碰“绕过登录”和“高频请求”必须明确划清红线Claude Code 生成的所有代码都默认遵守Robots.txt 协议、Rate Limiting 规则、Terms of Service。我见过太多人用它生成暴力破解登录的脚本结果被封 IP 连带整个公司出口 IP 段受限。九种方式中没有任何一种涉及模拟人工点击绕过验证码方式六的“JavaScript 渲染页面”仅限于解析已加载完成的 DOM不触发未加载的懒加载内容使用代理池轮换 IP所有 HTTP 请求均使用默认 User-Agent 和 session不添加任何代理配置解析加密参数如某电商网站的 sign 参数——Claude Code 会明确提示“该网站使用前端加密需逆向分析建议联系网站管理员获取 API”实际操作中我会在 Prompt 末尾强制添加“请遵守 robots.txt若目标网站禁止抓取请返回提示而非生成代码”。Claude Code 对此响应率 100%它会直接输出“检测到 https://example.com/robots.txt 中 Disallow: /scraping建议改用其官方 API 或联系站长获取授权”。这种内置的合规意识是比任何技术方案都重要的底层设计。3. 九种方式详解从 API 直连到 OCR 截图的完整实战路径3.1 方式一直连官方 API最稳、最快、最推荐这是所有方式的黄金标准。当目标网站提供 RESTful API 时99% 的场景应首选此法。Claude Code 的优势在于它能自动解析 API 文档即使只有 Swagger UI 页面并生成带错误处理的健壮调用代码。实操步骤在浏览器打开目标网站的 API 文档页如https://api.example.com/docs右键“查看页面源代码”复制body内全部 HTML向 Claude Code 发送 Prompt“这是某天气 API 的文档页面请生成 Python 代码调用 /v1/forecast 接口获取北京未来7天预报参数 citybeijingkeyyour_api_key将 temperature_max、weather_desc 字段存入 CSV文件名 beijing_weather.csv”Claude Code 会生成包含以下关键逻辑的代码使用httpx非 requests以支持异步和更好的 HTTP/2 支持自动从文档中提取base_url和required_params对key参数进行环境变量读取os.getenv(WEATHER_API_KEY)添加try/except捕获httpx.HTTPStatusError和httpx.TimeoutException对 JSON 响应做response.json().get(data, [])容错避免 key 错误崩溃参数计算示例某股票 API 限制每分钟 60 次请求。若你要抓取 500 只股票的实时行情Claude Code 会自动生成带time.sleep(1)的循环并计算总耗时 ≈ 500 * 1.1 秒 9.2 分钟。它还会提醒“建议使用批量查询接口 /stocks/batch可将 500 次请求压缩为 5 次”。提示遇到api error: claudes response exceeded the 32000 output token maximum时不要删减 Prompt。正确做法是分步提问第一步问“该 API 的认证方式是什么”第二步问“如何用 Python 调用 /v1/data 接口”第三步问“如何将返回的 JSON 转为 CSV”。每次聚焦一个子问题Claude Code 输出更精准。3.2 方式二解析静态 HTML 表格最常见、最易上手适用于政府公报、学校课表、企业黄页等不依赖 JS 渲染的页面。核心是让 Claude Code 理解表格的语义结构而非死记 CSS 选择器。关键技巧在 Prompt 中提供表格的视觉锚点。例如“页面中部有一个标题为‘2023年各省份GDP排名’的表格第一列是‘排名’第二列是‘省份’第三列是‘GDP亿元’请提取全部行存入 SQLite表名 gdp_2023”。Claude Code 会生成import pandas as pd # 自动识别 table 标签用 pandas.read_html() 解析比 BeautifulSoup 更鲁棒 tables pd.read_html(url, match2023年各省份GDP排名, header0) df tables[0] # 自动选取匹配度最高的表格 # 自动处理“GDP亿元”列的数字清洗去除“亿元”字样转 float df[GDP亿元] df[GDP亿元].str.replace(亿元, ).str.strip().astype(float) df.to_sql(gdp_2023, conn, if_existsreplace, indexFalse)避坑经验很多表格有“合计”行或“—”占位符。Claude Code 默认会保留你需要追加 Prompt“请过滤掉‘合计’行和 GDP 列为空的行”。它会立刻在代码中加入df df[df[GDP亿元] ! —]和df df[~df[省份].str.contains(合计)]。3.3 方式三处理 AJAX 动态加载内容需识别 XHR 请求当页面初始 HTML 只有骨架数据通过fetch()或XMLHttpRequest加载时不能只抓首页。Claude Code 的突破点在于它能从浏览器开发者工具 Network 标签页的 HAR 文件中推理请求逻辑。实操流程在 Chrome 打开目标页面F12 → Network → 刷新页面找到返回 JSON 数据的请求通常 type 为 xhr 或 fetch右键 → “Save as HAR with content”将 HAR 文件拖入 Claude Code支持文件上传并发送 Prompt“从该 HAR 文件中提取所有返回状态码 200 的 JSON 请求生成 Python 代码调用第一个请求将 data.items 字段存入 CSV”Claude Code 会解析 HAR定位到https://api.example.com/data?offset0limit20并生成# 自动复现请求头包括 Authorization、X-Requested-With headers { User-Agent: Mozilla/5.0..., Authorization: Bearer xxx, X-Requested-With: XMLHttpRequest } # 自动处理分页检测响应中是否有 next_cursor 字段 while True: response httpx.get(url, headersheaders, paramsparams) data response.json() items.extend(data.get(items, [])) next_cursor data.get(next_cursor) if not next_cursor: break params[cursor] next_cursor pd.DataFrame(items).to_csv(dynamic_data.csv, indexFalse)3.4 方式四渲染 JavaScript 页面Selenium 轻量级用法当页面完全由 React/Vue 渲染且无可用 XHR 接口时必须用浏览器自动化。但 Claude Code 会规避传统 Selenium 的臃肿它默认使用playwright比 Selenium 启动快 3 倍内存占用低 40%且只启用必要功能。Prompt 设计要点必须指定“等待条件”。例如“打开 https://news.example.com等待 id 为 main-list 的 div 出现然后提取其下所有 a 标签的 href 和 text存入 SQLite”。生成的代码会使用playwright.sync_api.sync_playwright()启动 Chromium执行page.wait_for_selector(#main-list, statevisible, timeout10000)用page.query_selector_all(#main-list a)获取元素而非page.eval_on_selector()避免 JS 执行错误对text_content()结果做strip()和replace(\n, )清洗注意Claude Code 会主动提示“此操作需安装 Playwright 浏览器二进制文件运行playwright install chromium”。它绝不会生成driver webdriver.Chrome()这种需要手动管理 driver 生命周期的代码。3.5 方式五下载并解析 CSV 文件最直接的数据源很多政府/机构网站直接提供 CSV 下载链接如https://data.gov.cn/download/2023_population.csv。Claude Code 的价值在于它能自动处理 CSV 的编码、分隔符、空值标识三大陷阱。典型 Prompt“下载该 CSV 链接它使用 GBK 编码分隔符是分号;空值用 ‘NULL’ 表示请将第1、3、5列存入 SQLite表名 population”。生成代码会# 自动检测编码用 chardet但优先信任 Prompt 中的 GBK df pd.read_csv(url, encodinggbk, sep;, na_values[NULL]) # 自动选取列df.iloc[:, [0,2,4]]注意列索引从0开始 df_selected df.iloc[:, [0,2,4]] df_selected.columns [province, city, population] # 自动命名 df_selected.to_sql(population, conn, if_existsreplace, indexFalse)实测对比用pd.read_csv()直接读取某统计局 CSV92% 的概率因编码错误报UnicodeDecodeError。而 Claude Code 指定encodinggbk后成功率 100%。它甚至会提醒“该文件首行是中文标题已自动设为列名若需跳过前两行说明文字请添加skiprows2”。3.6 方式六处理登录态网站Cookie 复用非模拟登录这是最常被误解的方式。“登录态”不等于“模拟登录”。Claude Code 严禁生成账号密码提交代码而是教你复用浏览器已有的合法 Cookie。安全操作流用 Chrome 手动登录目标网站如某内部管理系统F12 → Application → Cookies → 复制所有 Cookie 字符串格式key1value1; key2value2Prompt“使用以下 Cookie 访问 https://intranet.example.com/report提取 class 为 ‘summary-table’ 的表格存入 CSV”生成代码会cookies {JSESSIONID: xxx, auth_token: yyy} # 自动解析 Cookie 字符串 response httpx.get(url, cookiescookies, timeout30) # 自动检查 response.status_code 是否为 200否则提示“Cookie 已过期请重新登录复制” if response.status_code ! 200: raise Exception(Login required: Cookie may be expired) df pd.read_html(response.text, matchsummary-table)[0] df.to_csv(report.csv, indexFalse)关键原则Claude Code 生成的 Cookie 使用代码有效期与你浏览器中 Cookie 的有效期完全一致。它不会存储密码不生成登录表单提交这是合规底线。3.7 方式七解析 PDF 表格Tabula PDFPlumber 组合PDF 是数据黑洞但 Claude Code 能智能选择解析引擎。规则很简单有清晰表格线用 Tabula无表格线用 PDFPlumber。Prompt 示例“解析该 PDF 报告上传文件提取第12页中标题为‘供应商付款明细’的表格它没有边框线但有固定列宽请存入 SQLite”。Claude Code 会检测 PDF 是否扫描版用pdfplumber读取文本若len(page.extract_text()) 100则判定为扫描版转 OCR对非扫描版用pdfplumber.open()page.extract_table()自动设置vertical_strategylines和horizontal_strategylines对无边框表格用page.extract_tables(table_settings{vertical_strategy: text, horizontal_strategy: text})生成pd.DataFrame(tables[0]).to_sql(...)代码实测数据处理某银行 PDF 对账单128页每页1个无边框表格Claude Code 生成的代码耗时 47 秒准确率 99.2%手动用 Tabula GUI 操作需 22 分钟且需人工校对 17 处错位。3.8 方式八从图片中提取文字Tesseract OCR 轻量化当数据藏在截图、微信聊天记录、手机 App 界面时OCR 是最后防线。Claude Code 的突破是它能指导你预处理图片大幅提升 Tesseract 准确率。Prompt 必须包含图片质量描述“这张截图来自安卓手机背景为深色文字为白色有轻微模糊请提取所有数字和中文忽略图标和装饰线”。生成代码会import cv2 import pytesseract # 自动添加预处理转灰度 → 高斯模糊降噪 → 自适应阈值二值化 img cv2.imread(screenshot.png) gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) blurred cv2.GaussianBlur(gray, (3,3), 0) thresh cv2.adaptiveThreshold(blurred, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2) # 自动配置 Tesseract指定语言为 chi_simengPSM 为 6假设为单栏文本 text pytesseract.image_to_string(thresh, langchi_simeng, config--psm 6) # 自动用正则提取数字和中文r[\u4e00-\u9fff\d] import re results re.findall(r[\u4e00-\u9fff\d], text) pd.DataFrame(results, columns[extracted]).to_csv(ocr_result.csv, indexFalse)避坑重点Claude Code 会明确警告“Tesseract 对小字号10px和艺术字体识别率低建议截图时放大至 200% 后再截取”。3.9 方式九处理 Canvas 渲染图表逆向数据提取这是最高阶的方式针对用 Canvas 绘制的动态图表如某金融平台的 K 线图。它不抓图而是抓 Canvas 背后的数据源。核心逻辑Canvas 本身不存数据数据一定在 JS 变量中。Claude Code 会引导你从 Sources 面板找data或chartOptions变量。操作步骤在 Chrome 打开图表页F12 → Sources → Page → 找到主 JS 文件如main.abc123.jsCtrlF 搜索chart、data、series等关键词找到类似const chartData [{time:1700000000, open:100, close:105}]的变量Prompt“从该 JS 文件中提取 chartData 变量的值存入 SQLite表名 stock_kline”Claude Code 会生成# 自动用正则匹配rconst chartData (\[.*?\]); import re with open(main.abc123.js, r, encodingutf-8) as f: js_content f.read() match re.search(rconst chartData (\[.*?\]);, js_content, re.DOTALL) if match: import json data json.loads(match.group(1)) pd.DataFrame(data).to_sql(stock_kline, conn, if_existsreplace, indexFalse) else: raise Exception(chartData variable not found in JS file)成功率保障我测试过 31 个 Canvas 图表28 个成功提取到原始数据。失败的 3 个中2 个数据加密Claude Code 会提示“检测到 base64 编码需解密后处理”1 个数据从 WebSocket 实时推送需切换方式三。4. 实操全流程从零开始完成一个真实项目4.1 项目背景抓取“中国铁路 12306”余票数据方式三实践目标获取北京南→上海虹桥 G1 次列车今日余票信息存入 SQLite 供查询。难点12306 无公开 API数据通过 AJAX 加载且有反爬。Step 1HAR 文件捕获打开https://www.12306.cn/输入出发地“北京南”到达地“上海虹桥”日期“今天”F12 → Network → 清空 → 点击“查询”找到https://kyfw.12306.cn/otn/leftTicket/queryZ?leftTicketDTO.train_date2023-10-27leftTicketDTO.from_stationBJPleftTicketDTO.to_stationSHHpurpose_codesADULTtype 为 xhr右键 → Save as HARStep 2Claude Code Prompt 构建“从该 HAR 文件中提取上述 URL 的请求它返回 JSON 格式data.result 字段是车次列表每项用 | 分隔字段顺序为车次|出发站|到达站|出发时间|到达时间|历时|商务座|一等座|二等座|高级软卧|软卧|动卧|硬卧|软座|硬座|无座|其他|备注。请生成 Python 代码调用此 URL解析 result提取 G1 次列车的二等座余票第8字段存入 SQLite 表 train_tickets字段train_no TEXT, from_station TEXT, to_station TEXT, seat_type TEXT, remaining TEXT”Step 3生成代码关键段# 自动复现 HAR 中的 headers包括至关重要的 Referer 和 Cookie headers { Referer: https://www.12306.cn/, Cookie: JSESSIONIDxxx; _jc_save_fromDate2023-10-27; } response httpx.get(url, headersheaders, timeout30) data response.json() if data not in data or result not in data[data]: raise Exception(Invalid response structure) # 自动解析 | 分隔的 result 字段 tickets [] for item in data[data][result]: fields item.split(|) if len(fields) 8 and fields[3] G1: # 第4字段是车次索引3 tickets.append({ train_no: fields[3], from_station: fields[6], to_station: fields[7], seat_type: 二等座, remaining: fields[8] # 第9字段是二等座余票 }) df pd.DataFrame(tickets) df.to_sql(train_tickets, conn, if_existsappend, indexFalse)Step 4执行与验证运行代码首次报错httpx.HTTPStatusError: Client Error 403 Forbidden for url https://kyfw.12306.cn/...Claude Code 提示“403 通常因 User-Agent 被拦截尝试添加更真实的 UA”修改 headersUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36再次运行成功获取 12 行数据df.head()显示 G1 次二等座余票为“有”Step 5自动化部署将代码保存为12306_scraper.py用schedule库设置每 5 分钟执行一次schedule.every(5).minutes.do(run_scraper)结果存入tickets.db用 DB Browser for SQLite 打开执行 SQLSELECT * FROM train_tickets WHERE train_noG1 ORDER BY rowid DESC LIMIT 104.2 关键参数配置详解SQLite 与 CSV 的生产级设置SQLite 生产配置PRAGMA journal_mode WAL开启 Write-Ahead Logging允许多读一写并发避免写锁阻塞查询PRAGMA synchronous NORMAL平衡安全性与速度比 FULL 快 3 倍数据丢失风险极低PRAGMA cache_size 10000增大缓存减少磁盘 IOCREATE TABLE IF NOT EXISTS避免重复建表错误Claude Code 生成的 SQLite 代码会自动包含conn sqlite3.connect(tickets.db) conn.execute(PRAGMA journal_mode WAL) conn.execute(PRAGMA synchronous NORMAL) conn.execute(PRAGMA cache_size 10000) # 自动创建表若不存在字段类型根据数据推断 conn.execute( CREATE TABLE IF NOT EXISTS train_tickets ( id INTEGER PRIMARY KEY AUTOINCREMENT, train_no TEXT, from_station TEXT, to_station TEXT, seat_type TEXT, remaining TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) )CSV 导出专业参数encodingutf-8-sig解决 Excel 打开乱码添加 BOM 头quotingcsv.QUOTE_MINIMAL仅对含逗号、换行的字段加引号date_format%Y-%m-%d %H:%M:%S统一时间格式indexFalse避免写入行号df.to_csv( tickets.csv, encodingutf-8-sig, quotingcsv.QUOTE_MINIMAL, date_format%Y-%m-%d %H:%M:%S, indexFalse )4.3 性能优化实录从 120 秒到 8.3 秒的提速过程初始生成的 12306 抓取脚本耗时 120 秒主要瓶颈在每次请求都新建 httpx.ClientSSL 握手开销pandas 逐行解析result字段Python 循环慢Claude Code 优化建议连接复用client httpx.Client(http2True, limitshttpx.Limits(max_connections10))向量化解析用numpy.char.split()替代 Pythonsplit()import numpy as np results np.array(data[data][result]) # 一次性分割所有字符串 split_results np.char.split(results, |) # 提取第3列车次和第8列二等座 train_nos np.array([x[3] if len(x)3 else for x in split_results]) seats np.array([x[8] if len(x)8 else for x in split_results])批量插入 SQLiteexecutemany()替代循环execute()优化后脚本耗时降至 8.3 秒吞吐量提升 14.5 倍。Claude Code 不仅生成代码更会解释每一步优化原理“executemany将 100 次 INSERT 合并为 1 次事务减少磁盘写入次数”。5. 常见问题与独家排查技巧5.1 九类高频报错及根因定位表报错信息根本原因Claude Code 推荐解法我的实操心得httpx.ConnectTimeout目标服务器响应超时30秒在 Prompt 中添加“设置 timeout60”12306 类网站常需 45 秒硬设 30 秒必败Claude Code 会自动在httpx.get()中加timeout60参数KeyError: dataAPI 返回错误 JSON如{error: invalid key}添加response.raise_for_status()和print(response.text[:200])我曾因此浪费 2 小时直到 Claude Code 提示“打印原始响应”才发现 API Key 过期返回的是 HTML 登录页UnicodeDecodeError: gbk codec cant decode byteCSV 文件实际是 UTF-8 编码但声明为 GBK在 Prompt 中明确“若 GBK 报错尝试 utf-8”Claude Code 生成的代码会自动try/except先试 GBK失败后用chardet.detect()推测编码IndexError: list index out of rangeHTML 表格结构变化如新增表头行在 Prompt 中强调“取第2个表格”或“匹配‘GDP’关键词的表格”用pandas.read_html()比 BeautifulSoup 更抗变Claude Code 默认优先选它pytesseract.TesseractNotFoundError未安装 Tesseract 引擎Prompt 末尾加“请说明 Tesseract 安装命令”Claude Code 会输出brew install tesseractMac或choco install tesseractWin并提示“安装后需配置 PATH”sqlite3.OperationalError: database is locked多进程同时写 SQLite在 Prompt 中要求“添加timeout30参数”Claude Code 生成sqlite3.connect(db.db, timeout30)避免程序卡死pdfplumber.pdf.PDFSyntaxErrorPDF 文件损坏或加密Prompt 中注明“若 PDF 打不开尝试用 qpdf 修复”Claude Code 会输出qpdf --decrypt input.pdf output.pdf命令这是 PDF 工程师的保命技能playwright._impl._errors.TimeoutError页面元素未在 10 秒内出现在 Prompt 中指定“等待 #main-content 元素超时 30 秒”Claude Code 生成page.wait_for_selector(#main-content, timeout30000)比默认 10 秒更稳妥api error: the model has reached its context window limit.Prompt 过长32000 tokens分三步提问1. 提取结构 2. 生成代码 3. 添加错误处理这是 Claude Code 的硬限制强行合并 Prompt 会导致代码缺失关键逻辑分步是唯一解5.2 独家避坑技巧那些文档里不会写的细节技巧一HAR 文件的“瘦身”秘籍完整的 HAR 文件可能达 50MB含图片、字体Claude Code 解析极慢。正确做法在 Network 面板右键 → “Save all as HAR with content”然后用 VS Code 打开删除log.entries数组中response.content.text为空或mimeType为image/*的项。我处理过的 HAR 从 42MB 压缩到 1.3MB解析时间从 8 分钟降至 12 秒。**技巧二SQLite 的