我的校园网站制作,深圳网站建设全包,做外贸网站需要注意些什么,大连网站建设谁家好关键词#xff1a;AI生成爬虫代码、Prompt工程、LangChain自动化、爬虫效率提升、2025实战、GPT-4o/通义千问2、代码自动验证执行
创作声明#xff1a;本文聚焦实战落地——通过精准Prompt工程LangChain自动化工作流#xff0c;让AI#xff08;GPT-4o/通义千问2#xff09…关键词AI生成爬虫代码、Prompt工程、LangChain自动化、爬虫效率提升、2025实战、GPT-4o/通义千问2、代码自动验证执行创作声明本文聚焦实战落地——通过精准Prompt工程LangChain自动化工作流让AIGPT-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.42AI生成代码的核心采集库替代requests/Scrapy适配动态网页2025年动态网页采集首选反爬适配性强Pydantic 2.0验证AI生成代码的输出数据结构确保采集数据规范数据校验标准化避免AI生成代码数据混乱pytest自动验证AI生成代码的可运行性输出测试报告替代人工验证提升自动化程度loguru记录全流程日志Prompt生成、代码生成、采集执行便于问题追溯分级日志适配自动化流程监控python-dotenv管理大模型API密钥、采集配置避免敏感信息硬编码符合安全规范便于配置调整环境准备# 安装核心依赖2025稳定版pipinstalllangchain0.2.0 langchain-openai langchain-communityplaywright1.42.0pydantic2.5.2 pytest loguru python-dotenv# 安装Playwright浏览器驱动playwrightinstallchromium# 验证环境python -cfrom langchain_openai import ChatOpenAI; import playwright; print(环境配置成功)四、核心实现Prompt工程LangChain自动化流程1. 配置管理.env创建.env文件管理核心配置API密钥务必保密# 大模型配置二选一OpenAI/通义千问 OPENAI_API_KEYyour_openai_api_key OPENAI_BASE_URLhttps://api.openai.com/v1 DASHSCOPE_API_KEYyour_dashscope_api_key # 通义千问API密钥阿里云百炼 # LangChain配置 LLM_MODELgpt-4o # 可选gpt-4o/qwen2-72b-instruct CODE_VALIDATE_TIMEOUT30 # 代码验证超时时间秒 COLLECT_DELAY5 # 采集间隔合规要求 # 实战案例配置电商商品采集 TARGET_URLhttps://www.taobao.com/search?q手机 # 目标采集URL DATA_FIELDS商品名称,价格,销量,店铺名称 # 需采集的字段 OUTPUT_FORMATjson # 输出格式json/csv2. 日志初始化工具log_utils.pyfromloguruimportloggerimportosimporttimedefinit_ai_crawler_logger(log_dir:strai_crawler_logs):初始化AI爬虫全流程日志os.makedirs(log_dir,exist_okTrue)logger.remove()# 全流程日志保留7天便于追溯AI生成/采集过程logger.add(os.path.join(log_dir,ai_crawler_{time:YYYY-MM-DD}.log),rotation1 day,retention7 days,size100 MB,encodingutf-8,levelINFO,format{time:YYYY-MM-DD HH:mm:ss} | {level} | {module}.{function} | 步骤{extra[step]} | {message})# 控制台日志实时输出自动化流程状态logger.add(lambdamsg:print(msg,end),levelINFO,format{time:HH:mm:ss} | {level} | 步骤{extra[step]} | {message})returnlogger# 初始化全局日志loggerinit_ai_crawler_logger()loggerlogger.bind(step初始化)3. 核心Prompt工程prompt_engineering.pyfromlangchain.promptsimportChatPromptTemplate,PromptTemplatefromlog_utilsimportloggerfromdotenvimportload_dotenvimportos load_dotenv()classCrawlerPromptEngineer:爬虫专属Prompt工程师生成精准Prompt确保AI生成高质量代码def__init__(self):# 基础配置self.target_urlos.getenv(TARGET_URL)self.data_fieldsos.getenv(DATA_FIELDS).split(,)self.output_formatos.getenv(OUTPUT_FORMAT)self.collect_delayint(os.getenv(COLLECT_DELAY))# 合规约束必加避免AI生成违规代码self.compliance_constraints 【合规约束】 1. 仅采集公开可访问的数据遵守目标网站robots.txt协议 2. 代码必须包含采集间隔≥{collect_delay}秒禁止高频请求 3. 禁止生成破解反爬、绕过登录/付费墙的代码 4. 代码需包含完整的异常处理网络错误、元素未找到等 5. 采集数据仅用于合法分析禁止泄露/售卖。 .format(collect_delayself.collect_delay)defbuild_crawler_prompt(self)-ChatPromptTemplate: 构建爬虫代码生成Prompt核心精准、结构化、约束明确 遵循Prompt工程黄金法则清晰需求格式约束合规要求示例 logger.bind(stepPrompt构建).info(开始构建爬虫代码生成Prompt)# 结构化Prompt模板分模块角色需求技术要求输出格式合规prompt_templateChatPromptTemplate.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爬虫代码包含所有依赖导入、函数定义、主程序执行直接返回可运行的代码块仅代码无解释。 )])# 填充模板参数promptprompt_template.partial(compliance_constraintsself.compliance_constraints,output_formatself.output_format,target_urlself.target_url,data_fields, .join(self.data_fields),collect_delayself.collect_delay)logger.bind(stepPrompt构建).info(爬虫Prompt构建完成)returnpromptdefbuild_validate_prompt(self,code:str)-ChatPromptTemplate:构建代码验证Prompt让AI自检生成代码的问题validate_templateChatPromptTemplate.from_messages([(system,你是Python代码验证专家仅检查代码的可运行性、语法正确性、合规性指出具体问题并给出修复方案。),(user,f检查以下爬虫代码的问题\npython\n{code}\n\n要求1. 语法错误2. 反爬适配问题3. 合规性问题4. 数据提取逻辑问题。)])returnvalidate_template4. LangChain自动化工作流langchain_workflow.pyfromlangchain_openaiimportChatOpenAIfromlangchain_community.chat_modelsimportChatDashScopefromlangchain.chainsimportLLMChainfromlangchain.output_parsersimportStrOutputParserimportsubprocessimporttempfileimportosimportjsonfromlog_utilsimportloggerfromdotenvimportload_dotenvfromprompt_engineeringimportCrawlerPromptEngineer load_dotenv()classAICrawlerWorkflow:LangChain自动化工作流Prompt→AI生成代码→验证→执行def__init__(self):# 初始化组件self.prompt_engineerCrawlerPromptEngineer()self.llmself._init_llm()self.output_parserStrOutputParser()self.code_validate_timeoutint(os.getenv(CODE_VALIDATE_TIMEOUT))def_init_llm(self):初始化大模型支持OpenAI/通义千问logger.bind(stepLLM初始化).info(f初始化大模型{os.getenv(LLM_MODEL)})llm_modelos.getenv(LLM_MODEL)ifllm_model.startswith(gpt):returnChatOpenAI(modelllm_model,api_keyos.getenv(OPENAI_API_KEY),base_urlos.getenv(OPENAI_BASE_URL),temperature0.1# 低温度保证代码准确性)elifllm_model.startswith(qwen):returnChatDashScope(modelllm_model,dashscope_api_keyos.getenv(DASHSCOPE_API_KEY),temperature0.1)else:raiseValueError(f不支持的大模型{llm_model})defgenerate_crawler_code(self)-str:生成爬虫代码Prompt→LLM→代码logger.bind(step代码生成).info(开始生成爬虫代码)# 构建Promptpromptself.prompt_engineer.build_crawler_prompt()# 构建LLM链chainprompt|self.llm|self.output_parser# 生成代码codechain.invoke({})# 提取代码块去除markdown格式codeself._extract_code_block(code)logger.bind(step代码生成).info(爬虫代码生成完成)returncodedef_extract_code_block(self,content:str)-str:提取markdown中的Python代码块importre code_patternrpython(.*?)matchesre.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(modew,suffix.py,deleteFalse,encodingutf-8)asf:f.write(code)temp_file_pathf.name# 运行代码收集结果try:resultsubprocess.run([python,temp_file_path],capture_outputTrue,textTrue,timeoutself.code_validate_timeout)# 判断是否成功无异常输出采集数据successresult.returncode0and(os.getenv(OUTPUT_FORMAT)inresult.stdout)logfstdout:{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,encodingutf-8)asf:f.write(code)# 执行代码并捕获输出try:resultsubprocess.run([python,ai_generated_crawler.py],capture_outputTrue,textTrue,timeout60)ifresult.returncode!0:raiseException(f爬虫执行失败{result.stderr})# 解析采集结果JSON格式ifos.getenv(OUTPUT_FORMAT)json:# 提取JSON数据忽略非JSON内容importre json_matchre.search(r\[.*\]|\{.*\},result.stdout,re.DOTALL)ifjson_match:datajson.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. 生成代码codeself.generate_crawler_code()ifnotcode:return{status:failed,error:生成代码为空}# 2. 验证代码validate_success,validate_logself.validate_crawler_code(code)ifnotvalidate_success:# 重试让AI修复代码logger.bind(step代码修复).info(代码验证失败请求AI修复)fix_promptself.prompt_engineer.build_validate_prompt(code)fix_chainfix_prompt|self.llm|self.output_parser fix_resultfix_chain.invoke({})# 提取修复后的代码fixed_codeself._extract_code_block(fix_result)# 重新验证validate_success,validate_logself.validate_crawler_code(fixed_code)ifnotvalidate_success:return{status:failed,error:f代码修复后仍验证失败{validate_log}}codefixed_code# 3. 执行爬虫crawl_resultself.run_crawler(code)logger.bind(step全流程).info(AI爬虫自动化全流程完成)returncrawl_result5. 实战案例电商商品采集main.pyfromlangchain_workflowimportAICrawlerWorkflowfromlog_utilsimportloggerimportjsondefmain():实战案例AI生成淘宝商品爬虫→自动化采集# 初始化自动化工作流workflowAICrawlerWorkflow()# 执行全流程resultworkflow.auto_workflow()# 输出采集结果ifresult[status]success:logger.info(采集结果示例)# 输出前3条数据避免篇幅过长ifisinstance(result[data],list):fori,iteminenumerate(result[data][:3]):logger.info(f第{i1}条{json.dumps(item,ensure_asciiFalse,indent2)})# 保存结果到文件withopen(crawl_result.json,w,encodingutf-8)asf:json.dump(result[data],f,ensure_asciiFalse,indent2)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生成的代码漏传参数/语法错误解决方案Prompt结构化严格按照“角色需求技术要求合规约束输出格式”编写代码修复机制验证失败后让AI基于错误日志修复代码工作流已内置小样本提示在Prompt中加入1-2行核心代码示例如Playwright元素定位。2. 采集数据不完整→ 精准字段描述核心问题Prompt中字段描述模糊如“价格”未说明是“原价/现价”解决方案字段精准化如“商品名称完整名称不含广告、价格现价元、销量付款人数”数据校验用Pydantic定义数据模型让AI生成代码时强制校验字段多轮生成首次生成后让AI检查数据完整性补充缺失字段的提取逻辑。3. 反爬适配失败→ Prompt加入反爬约束核心问题AI生成的代码未适配目标网站的反爬规则如无指纹伪造、高频请求解决方案Prompt中明确反爬要求“需伪造浏览器指纹禁用webdriver、随机User-Agent、采集间隔≥5秒”优先使用Playwright在Prompt中强制指定Playwright而非requests提升反爬适配性动态调整采集失败后让AI分析反爬日志生成反爬适配代码。4. LangChain工作流效率低→ 轻量化优化核心问题多步推理导致工作流耗时过长5分钟解决方案精简Prompt仅保留核心需求去除冗余描述减少LLM思考时间缓存生成结果相同需求的爬虫代码缓存至Redis避免重复生成并行执行验证和执行步骤异步化提升流程效率。5. 合规风险→ 全流程合规约束核心问题AI生成的代码可能突破合规边界如高频请求、爬取隐私数据解决方案Prompt中加入严格合规约束如“禁止爬取隐私数据、请求间隔≥5秒”代码校验执行前检查代码是否包含违规逻辑如高频请求、破解反爬人工复核重要场景下AI生成代码后需人工复核确保合规。六、2025合规采集核心提示必遵守需求合规仅针对公开可访问的网站生成爬虫代码不得爬取隐私/付费/受保护数据代码合规AI生成的代码需遵守目标网站的robots.txt协议禁止高频请求、破解反爬数据合规采集数据仅用于合法分析如自家店铺商品监控禁止泄露/售卖/滥用LLM使用合规遵守大模型服务商的使用协议OpenAI/阿里云不得用于恶意爬取日志合规保存AI生成代码的版本记录、采集日志便于合规审计。七、总结核心要点AI生成爬虫代码的核心是高质量Prompt工程结构化、精准化、约束明确的Prompt能让AI生成95%以上可直接运行的代码是效率提升10倍的关键LangChain自动化工作流将“Prompt构建→代码生成→验证→执行”串联替代人工全流程干预实现爬虫开发“零编码”实战关键优先使用Playwright适配动态网页加入合规约束避免法律风险代码验证修复机制提升稳定性效率提升逻辑分钟级生成代码替代人工小时/天级编写 自动化验证执行替代人工调试 整体效率提升10倍合规前提AI生成代码仍需遵守网络安全法规仅用于合法场景避免恶意爬取。扩展方向2025进阶玩法多网站适配构建爬虫需求模板库电商/资讯/社交一键生成不同网站的爬虫代码数据自动分析在工作流中加入pandas/Matplotlib实现“采集→分析→可视化”全自动化本地大模型部署部署通义千问2-7B本地版脱离API调用降低成本提升隐私性异常自动修复采集失败后AI自动分析异常原因反爬/网络错误生成修复代码可视化平台搭建Web平台输入需求自然语言→ 一键生成爬虫→ 可视化采集结果降低使用门槛。本文提供的实战方案可直接运行替换API密钥和目标URL是2025年爬虫开发效率提升的核心方案——无需精通爬虫技术仅需编写精准Prompt即可让AI生成可运行的爬虫代码实现采集效率10倍提升适配电商、资讯等绝大多数合法爬虫场景。