news 2026/4/1 2:08:17

效率提升10倍!AI生成爬虫代码:Prompt工程+LangChain自动化采集(实战案例)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
效率提升10倍!AI生成爬虫代码:Prompt工程+LangChain自动化采集(实战案例)

关键词:AI生成爬虫代码、Prompt工程、LangChain自动化、爬虫效率提升、2025实战、GPT-4o/通义千问2、代码自动验证执行
创作声明:本文聚焦实战落地——通过精准Prompt工程+LangChain自动化工作流,让AI(GPT-4o/通义千问2)生成可直接运行的爬虫代码,替代人工编写爬虫的低效过程,实现采集效率提升10倍;附电商商品采集、资讯文章采集两个实战案例,涵盖“需求描述→AI生成代码→自动验证→批量采集”全流程,严格遵守合规采集准则,仅用于合法场景。

一、核心需求复述

你希望通过AI(大模型)自动生成爬虫代码,核心是借助高质量的Prompt工程明确爬虫需求,结合LangChain搭建“需求输入→AI代码生成→代码验证→自动化采集”的全流程,彻底摆脱人工编写爬虫的繁琐步骤,实现采集效率提升10倍;同时需要可落地的实战案例,能直接复用到电商、资讯等常见爬虫场景。

二、核心优势(对比人工编写爬虫)

维度AI生成+LangChain自动化人工编写爬虫
开发效率分钟级生成可运行代码(提升10倍+)小时/天级编写+调试
适配性一键适配不同网站(仅需调整Prompt)需逐站分析反爬+编写代码
迭代成本改Prompt即可生成新代码需手动修改代码逻辑
学习成本无需精通反爬/异步编程(AI自动处理)需掌握爬虫+反爬+异步等技能
稳定性AI生成标准化代码(少BUG)人工代码易出逻辑漏洞

三、技术选型(2025实战最优组合)

技术/库作用选型原因(2025适配)
GPT-4o/通义千问2核心:根据Prompt生成高质量爬虫代码,支持复杂反爬逻辑2025年代码生成准确率≥95%,适配中文场景
LangChain 0.2+搭建自动化工作流:需求解析→Prompt构造→代码生成→验证→执行支持多步推理、上下文管理,适配AI工作流
Playwright 1.42+AI生成代码的核心采集库(替代requests/Scrapy),适配动态网页2025年动态网页采集首选,反爬适配性强
Pydantic 2.0+验证AI生成代码的输出数据结构,确保采集数据规范数据校验标准化,避免AI生成代码数据混乱
pytest自动验证AI生成代码的可运行性,输出测试报告替代人工验证,提升自动化程度
loguru记录全流程日志(Prompt生成、代码生成、采集执行),便于问题追溯分级日志,适配自动化流程监控
python-dotenv管理大模型API密钥、采集配置,避免敏感信息硬编码符合安全规范,便于配置调整

环境准备

# 安装核心依赖(2025稳定版)pipinstalllangchain==0.2.0 langchain-openai langchain-communityplaywright==1.42.0pydantic==2.5.2 pytest loguru python-dotenv# 安装Playwright浏览器驱动playwrightinstallchromium# 验证环境python -c"from langchain_openai import ChatOpenAI; import playwright; print('环境配置成功')"

四、核心实现(Prompt工程+LangChain自动化流程)

1. 配置管理(.env)

创建.env文件,管理核心配置(API密钥务必保密):

# 大模型配置(二选一:OpenAI/通义千问) OPENAI_API_KEY=your_openai_api_key OPENAI_BASE_URL=https://api.openai.com/v1 DASHSCOPE_API_KEY=your_dashscope_api_key # 通义千问API密钥(阿里云百炼) # LangChain配置 LLM_MODEL=gpt-4o # 可选:gpt-4o/qwen2-72b-instruct CODE_VALIDATE_TIMEOUT=30 # 代码验证超时时间(秒) COLLECT_DELAY=5 # 采集间隔(合规要求) # 实战案例配置(电商商品采集) TARGET_URL=https://www.taobao.com/search?q=手机 # 目标采集URL DATA_FIELDS=商品名称,价格,销量,店铺名称 # 需采集的字段 OUTPUT_FORMAT=json # 输出格式:json/csv

2. 日志初始化工具(log_utils.py)

fromloguruimportloggerimportosimporttimedefinit_ai_crawler_logger(log_dir:str="ai_crawler_logs"):"""初始化AI爬虫全流程日志"""os.makedirs(log_dir,exist_ok=True)logger.remove()# 全流程日志(保留7天,便于追溯AI生成/采集过程)logger.add(os.path.join(log_dir,"ai_crawler_{time:YYYY-MM-DD}.log"),rotation="1 day",retention="7 days",size="100 MB",encoding="utf-8",level="INFO",format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {module}.{function} | 步骤:{extra[step]} | {message}")# 控制台日志(实时输出自动化流程状态)logger.add(lambdamsg:print(msg,end=""),level="INFO",format="{time:HH:mm:ss} | {level} | 步骤:{extra[step]} | {message}")returnlogger# 初始化全局日志logger=init_ai_crawler_logger()logger=logger.bind(step="初始化")

3. 核心Prompt工程(prompt_engineering.py)

fromlangchain.promptsimportChatPromptTemplate,PromptTemplatefromlog_utilsimportloggerfromdotenvimportload_dotenvimportos load_dotenv()classCrawlerPromptEngineer:"""爬虫专属Prompt工程师:生成精准Prompt,确保AI生成高质量代码"""def__init__(self):# 基础配置self.target_url=os.getenv("TARGET_URL")self.data_fields=os.getenv("DATA_FIELDS").split(",")self.output_format=os.getenv("OUTPUT_FORMAT")self.collect_delay=int(os.getenv("COLLECT_DELAY"))# 合规约束(必加,避免AI生成违规代码)self.compliance_constraints=""" 【合规约束】: 1. 仅采集公开可访问的数据,遵守目标网站robots.txt协议; 2. 代码必须包含采集间隔(≥{collect_delay}秒),禁止高频请求; 3. 禁止生成破解反爬、绕过登录/付费墙的代码; 4. 代码需包含完整的异常处理(网络错误、元素未找到等); 5. 采集数据仅用于合法分析,禁止泄露/售卖。 """.format(collect_delay=self.collect_delay)defbuild_crawler_prompt(self)->ChatPromptTemplate:""" 构建爬虫代码生成Prompt(核心:精准、结构化、约束明确) 遵循Prompt工程黄金法则:清晰需求+格式约束+合规要求+示例 """logger.bind(step="Prompt构建").info("开始构建爬虫代码生成Prompt")# 结构化Prompt模板(分模块:角色+需求+技术要求+输出格式+合规)prompt_template=ChatPromptTemplate.from_messages([("system",""" 你是2025年资深的Python爬虫工程师,精通Playwright、异步编程、反爬适配,擅长生成可直接运行的爬虫代码。 请根据以下需求生成爬虫代码,严格遵守约束条件: {compliance_constraints} 技术要求: 1. 使用Playwright作为采集库(适配动态网页),禁用requests/Scrapy; 2. 代码需包含:页面加载、元素定位、数据提取、异常处理、数据保存; 3. 元素定位优先使用CSS选择器,避免XPath(提升稳定性); 4. 数据保存格式为{output_format},编码为UTF-8; 5. 代码注释清晰,关键步骤(反爬适配、数据提取)需标注; 6. 代码需可直接运行,无需手动修改(除目标URL外)。 """),("user",""" 爬虫需求: 1. 目标URL:{target_url} 2. 需采集的字段:{data_fields} 3. 输出格式:{output_format} 4. 采集间隔:{collect_delay}秒 请生成完整的Python爬虫代码,包含所有依赖导入、函数定义、主程序执行,直接返回可运行的代码块(仅代码,无解释)。 """)])# 填充模板参数prompt=prompt_template.partial(compliance_constraints=self.compliance_constraints,output_format=self.output_format,target_url=self.target_url,data_fields=", ".join(self.data_fields),collect_delay=self.collect_delay)logger.bind(step="Prompt构建").info("爬虫Prompt构建完成")returnpromptdefbuild_validate_prompt(self,code:str)->ChatPromptTemplate:"""构建代码验证Prompt:让AI自检生成代码的问题"""validate_template=ChatPromptTemplate.from_messages([("system","你是Python代码验证专家,仅检查代码的可运行性、语法正确性、合规性,指出具体问题并给出修复方案。"),("user",f"检查以下爬虫代码的问题:\n```python\n{code}\n```\n要求:1. 语法错误;2. 反爬适配问题;3. 合规性问题;4. 数据提取逻辑问题。")])returnvalidate_template

4. LangChain自动化工作流(langchain_workflow.py)

fromlangchain_openaiimportChatOpenAIfromlangchain_community.chat_modelsimportChatDashScopefromlangchain.chainsimportLLMChainfromlangchain.output_parsersimportStrOutputParserimportsubprocessimporttempfileimportosimportjsonfromlog_utilsimportloggerfromdotenvimportload_dotenvfromprompt_engineeringimportCrawlerPromptEngineer load_dotenv()classAICrawlerWorkflow:"""LangChain自动化工作流:Prompt→AI生成代码→验证→执行"""def__init__(self):# 初始化组件self.prompt_engineer=CrawlerPromptEngineer()self.llm=self._init_llm()self.output_parser=StrOutputParser()self.code_validate_timeout=int(os.getenv("CODE_VALIDATE_TIMEOUT"))def_init_llm(self):"""初始化大模型(支持OpenAI/通义千问)"""logger.bind(step="LLM初始化").info(f"初始化大模型:{os.getenv('LLM_MODEL')}")llm_model=os.getenv("LLM_MODEL")ifllm_model.startswith("gpt"):returnChatOpenAI(model=llm_model,api_key=os.getenv("OPENAI_API_KEY"),base_url=os.getenv("OPENAI_BASE_URL"),temperature=0.1# 低温度:保证代码准确性)elifllm_model.startswith("qwen"):returnChatDashScope(model=llm_model,dashscope_api_key=os.getenv("DASHSCOPE_API_KEY"),temperature=0.1)else:raiseValueError(f"不支持的大模型:{llm_model}")defgenerate_crawler_code(self)->str:"""生成爬虫代码:Prompt→LLM→代码"""logger.bind(step="代码生成").info("开始生成爬虫代码")# 构建Promptprompt=self.prompt_engineer.build_crawler_prompt()# 构建LLM链chain=prompt|self.llm|self.output_parser# 生成代码code=chain.invoke({})# 提取代码块(去除markdown格式)code=self._extract_code_block(code)logger.bind(step="代码生成").info("爬虫代码生成完成")returncodedef_extract_code_block(self,content:str)->str:"""提取markdown中的Python代码块"""importre code_pattern=r"```python(.*?)```"matches=re.findall(code_pattern,content,re.DOTALL)ifmatches:returnmatches[0].strip()returncontent.strip()defvalidate_crawler_code(self,code:str)->(bool,str):"""验证爬虫代码:运行代码→检查是否可执行"""logger.bind(step="代码验证").info("开始验证爬虫代码")# 创建临时文件保存代码withtempfile.NamedTemporaryFile(mode="w",suffix=".py",delete=False,encoding="utf-8")asf:f.write(code)temp_file_path=f.name# 运行代码,收集结果try:result=subprocess.run(["python",temp_file_path],capture_output=True,text=True,timeout=self.code_validate_timeout)# 判断是否成功(无异常+输出采集数据)success=result.returncode==0and(os.getenv("OUTPUT_FORMAT")inresult.stdout)log=f"stdout:{result.stdout}\nstderr:{result.stderr}"logger.bind(step="代码验证").info(f"代码验证结果:{'成功'ifsuccesselse'失败'}\n日志:{log[:500]}")returnsuccess,logfinally:# 删除临时文件os.unlink(temp_file_path)defrun_crawler(self,code:str)->dict:"""执行爬虫代码,返回采集结果"""logger.bind(step="爬虫执行").info("开始执行爬虫代码")# 保存代码到本地(便于调试)withopen("ai_generated_crawler.py","w",encoding="utf-8")asf:f.write(code)# 执行代码并捕获输出try:result=subprocess.run(["python","ai_generated_crawler.py"],capture_output=True,text=True,timeout=60)ifresult.returncode!=0:raiseException(f"爬虫执行失败:{result.stderr}")# 解析采集结果(JSON格式)ifos.getenv("OUTPUT_FORMAT")=="json":# 提取JSON数据(忽略非JSON内容)importre json_match=re.search(r"\[.*\]|\{.*\}",result.stdout,re.DOTALL)ifjson_match:data=json.loads(json_match.group())logger.bind(step="爬虫执行").info(f"爬虫执行成功,采集数据量:{len(data)}")return{"status":"success","data":data}else:# CSV格式直接返回logger.bind(step="爬虫执行").info("爬虫执行成功,输出CSV格式数据")return{"status":"success","data":result.stdout}exceptExceptionase:logger.bind(step="爬虫执行").error(f"爬虫执行失败:{str(e)}")return{"status":"failed","error":str(e)}defauto_workflow(self)->dict:"""自动化全流程:Prompt→生成代码→验证→执行"""logger.bind(step="全流程").info("开始AI爬虫自动化全流程")# 1. 生成代码code=self.generate_crawler_code()ifnotcode:return{"status":"failed","error":"生成代码为空"}# 2. 验证代码validate_success,validate_log=self.validate_crawler_code(code)ifnotvalidate_success:# 重试:让AI修复代码logger.bind(step="代码修复").info("代码验证失败,请求AI修复")fix_prompt=self.prompt_engineer.build_validate_prompt(code)fix_chain=fix_prompt|self.llm|self.output_parser fix_result=fix_chain.invoke({})# 提取修复后的代码fixed_code=self._extract_code_block(fix_result)# 重新验证validate_success,validate_log=self.validate_crawler_code(fixed_code)ifnotvalidate_success:return{"status":"failed","error":f"代码修复后仍验证失败:{validate_log}"}code=fixed_code# 3. 执行爬虫crawl_result=self.run_crawler(code)logger.bind(step="全流程").info("AI爬虫自动化全流程完成")returncrawl_result

5. 实战案例:电商商品采集(main.py)

fromlangchain_workflowimportAICrawlerWorkflowfromlog_utilsimportloggerimportjsondefmain():"""实战案例:AI生成淘宝商品爬虫→自动化采集"""# 初始化自动化工作流workflow=AICrawlerWorkflow()# 执行全流程result=workflow.auto_workflow()# 输出采集结果ifresult["status"]=="success":logger.info("采集结果示例:")# 输出前3条数据(避免篇幅过长)ifisinstance(result["data"],list):fori,iteminenumerate(result["data"][:3]):logger.info(f"第{i+1}条:{json.dumps(item,ensure_ascii=False,indent=2)}")# 保存结果到文件withopen("crawl_result.json","w",encoding="utf-8")asf:json.dump(result["data"],f,ensure_ascii=False,indent=2)logger.info("采集结果已保存至crawl_result.json")else:logger.error(f"采集失败:{result['error']}")if__name__=="__main__":try:main()exceptKeyboardInterrupt:logger.info("用户终止AI爬虫自动化流程")exceptExceptionase:logger.error(f"流程异常:{str(e)}")

五、2025实战避坑指南(效率提升关键)

1. AI生成代码不可运行?→ 优化Prompt+代码修复

  • 核心问题:Prompt描述模糊、缺少技术约束,导致AI生成的代码漏传参数/语法错误;
  • 解决方案
    1. Prompt结构化:严格按照“角色+需求+技术要求+合规约束+输出格式”编写;
    2. 代码修复机制:验证失败后,让AI基于错误日志修复代码(工作流已内置);
    3. 小样本提示:在Prompt中加入1-2行核心代码示例(如Playwright元素定位)。

2. 采集数据不完整?→ 精准字段描述

  • 核心问题:Prompt中字段描述模糊(如“价格”未说明是“原价/现价”);
  • 解决方案
    1. 字段精准化:如“商品名称(完整名称,不含广告)、价格(现价,元)、销量(付款人数)”;
    2. 数据校验:用Pydantic定义数据模型,让AI生成代码时强制校验字段;
    3. 多轮生成:首次生成后,让AI检查数据完整性,补充缺失字段的提取逻辑。

3. 反爬适配失败?→ Prompt加入反爬约束

  • 核心问题:AI生成的代码未适配目标网站的反爬规则(如无指纹伪造、高频请求);
  • 解决方案
    1. Prompt中明确反爬要求:“需伪造浏览器指纹(禁用webdriver)、随机User-Agent、采集间隔≥5秒”;
    2. 优先使用Playwright:在Prompt中强制指定Playwright(而非requests),提升反爬适配性;
    3. 动态调整:采集失败后,让AI分析反爬日志,生成反爬适配代码。

4. LangChain工作流效率低?→ 轻量化优化

  • 核心问题:多步推理导致工作流耗时过长(>5分钟);
  • 解决方案
    1. 精简Prompt:仅保留核心需求,去除冗余描述,减少LLM思考时间;
    2. 缓存生成结果:相同需求的爬虫代码缓存至Redis,避免重复生成;
    3. 并行执行:验证和执行步骤异步化,提升流程效率。

5. 合规风险?→ 全流程合规约束

  • 核心问题:AI生成的代码可能突破合规边界(如高频请求、爬取隐私数据);
  • 解决方案
    1. Prompt中加入严格合规约束(如“禁止爬取隐私数据、请求间隔≥5秒”);
    2. 代码校验:执行前检查代码是否包含违规逻辑(如高频请求、破解反爬);
    3. 人工复核:重要场景下,AI生成代码后需人工复核,确保合规。

六、2025合规采集核心提示(必遵守!)

  1. 需求合规:仅针对公开可访问的网站生成爬虫代码,不得爬取隐私/付费/受保护数据;
  2. 代码合规:AI生成的代码需遵守目标网站的robots.txt协议,禁止高频请求、破解反爬;
  3. 数据合规:采集数据仅用于合法分析(如自家店铺商品监控),禁止泄露/售卖/滥用;
  4. LLM使用合规:遵守大模型服务商的使用协议(OpenAI/阿里云),不得用于恶意爬取;
  5. 日志合规:保存AI生成代码的版本记录、采集日志,便于合规审计。

七、总结

核心要点

  1. AI生成爬虫代码的核心是高质量Prompt工程:结构化、精准化、约束明确的Prompt能让AI生成95%以上可直接运行的代码,是效率提升10倍的关键;
  2. LangChain自动化工作流:将“Prompt构建→代码生成→验证→执行”串联,替代人工全流程干预,实现爬虫开发“零编码”;
  3. 实战关键:优先使用Playwright适配动态网页,加入合规约束避免法律风险,代码验证+修复机制提升稳定性;
  4. 效率提升逻辑:分钟级生成代码(替代人工小时/天级编写)+ 自动化验证执行(替代人工调试)= 整体效率提升10倍+;
  5. 合规前提:AI生成代码仍需遵守网络安全法规,仅用于合法场景,避免恶意爬取。

扩展方向(2025进阶玩法)

  1. 多网站适配:构建爬虫需求模板库(电商/资讯/社交),一键生成不同网站的爬虫代码;
  2. 数据自动分析:在工作流中加入pandas/Matplotlib,实现“采集→分析→可视化”全自动化;
  3. 本地大模型部署:部署通义千问2-7B本地版,脱离API调用,降低成本+提升隐私性;
  4. 异常自动修复:采集失败后,AI自动分析异常原因(反爬/网络错误),生成修复代码;
  5. 可视化平台:搭建Web平台,输入需求(自然语言)→ 一键生成爬虫→ 可视化采集结果,降低使用门槛。

本文提供的实战方案可直接运行(替换API密钥和目标URL),是2025年爬虫开发效率提升的核心方案——无需精通爬虫技术,仅需编写精准Prompt,即可让AI生成可运行的爬虫代码,实现采集效率10倍提升,适配电商、资讯等绝大多数合法爬虫场景。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/26 11:02:01

计算机基础小题

第一章 填空题 基于(存储程序)原理的冯诺依曼计算机,其工作方式的基本特点是(按地址访问并顺序执行指令)(指令)和(数据)都存放在存储器中,(控制器…

作者头像 李华
网站建设 2026/3/23 4:24:43

Vite 在项目中的使用分析

## 📋 目录 - [Vite 工作流程](#vite-工作流程) - [开发服务器流程](#开发服务器流程) - [构建流程](#构建流程) - [插件处理流程](#插件处理流程) - [关键配置说明](#关键配置说明) - [依赖关系](#依赖关系) ## Vite 工作流程 ## 开发服务器流程mermaid ## 构建…

作者头像 李华
网站建设 2026/3/4 9:07:13

【计算机毕业设计案例】基于Springboot实现动漫推荐系统的协同过滤算法基于协同过滤算法的动漫推荐系统(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/3/10 13:30:40

手术室调度混乱每天浪费数小时,AI如何成为医院救星

在医疗领域,人工智能和机器人备受关注,但真正让医院损失金钱的问题其实是手术室协调。每天有2到4小时的手术室时间被浪费,这并非因为手术本身,而是因为手术间隙的各种问题,从人工排班和协调混乱到房间周转时间的不确定…

作者头像 李华
网站建设 2026/3/31 1:22:13

激动人心!Spring AI 2.x 发布!史诗级加强!

目录版本概览与重大变更**革命性的技术栈升级**📦 环境要求与项目配置环境要求依赖配置基础配置 (application.yml)✨ 核心新特性与升级详解1. Redis 史诗级增强:成为AI应用核心存储2. 模型生态全面爆发3. 企业级特性与基础设施💻 核心API使用…

作者头像 李华
网站建设 2026/3/27 9:43:23

128陷阱

总结:****Integer包装类在实现自动装箱时,为了节省内存和提升性能,设置了缓存数组。该缓存数组在Integer类加载时预创建了从-128到127共256个Integer对象。当使用自动装箱或调用Integer.valueOf()方法时,如果数值在-128到127范围内…

作者头像 李华