Python

Python是一门诞生于1991年的高级、解释型编程语言,由吉多·范罗苏姆创造。其核心设计哲学强调代码的极简性和可读性,尤其依赖清晰的缩进来定义代码结构,这使得它语法接近英语,非常易于学习和使用。作为动态类型语言,它为快速开发和原型设计提供了极大的灵活性,并支持面向对象、命令式、函数式等多种编程范式。Python的巨大优势在于其拥有一个由庞大活跃社区支撑的丰富第三方库生态系统(PyPI),覆盖了几乎所有应用领域:无论是Web开发(Django, Flask)、数据科学(Pandas, NumPy, Matplotlib)、人工智能(TensorFlow, PyTorch)还是自动化脚本和系统运维,都能找到成熟高效的工具库。这种“开箱即用”的特性使其成为解决各类实际问题的“瑞士军刀”,兼具强大的功能与简单的语法。
互联网信息推荐算法安全评估平台(http://116.62.162.16/home)是一个面向算法治理与信息安全分析的专业工具。该平台支持从快手、微博、抖音、小红书等多类主流平台进行数据抓取与分析,实现对推荐算法行为的全面监测和量化评估。 平台核心功能包括宏观数据看板、账号群体画像分析、安全指标追踪等,能够精准识别如“诱导控制”和“干扰识别”等算法风险行为,并以可视化方式呈现其变化趋势。它已管理超600万账号、37类群体画像,支撑起对信息传播机制与算法影响的深入洞察。 该平台适用于监管机构、研究单位及平台企业,为其提供算法安全评估、舆论风险预警和治理策略制定方面的数据支持,最终推动推荐算法透明、可信、向善发展。
2450PythonUI组件库
产品api无法实现对端口进程的批量整理、SAP与非SAP的自动判断、以及端口对应Web url的自动批量整理 通过本程序集,可使用万相主机安全api+蔷薇微隔离api,批量识别并整理可视化的,暴露至某个范围的机器端口、端口对应进程、进程对应weburl(如有),节省了暴露面排查时的手工操作。 1、实现某能源企业ERP项目梳理端口暴露面的需求; 2、使用python的requests包、openpyxl包等实现; 3、调用产品api实现非自带功能,实现多线程发包节省时间、增量判断节省人工成本; 4、部署至服务器定期执行。
950Python网络安全
爬虫脚本产品系统
行业:智慧农业、植物保护、农业信息化 业务场景:农业知识库构建、病虫害识别模型训练、数据分析和决策支持 功能模块:代理管理模块、请求调度模块(并发)、数据解析与存储模块、状态管理模块(断点续爬、增量更新)、定时任务模块 实现功能:自动爬取植小保小程序中的问答数据、病虫害识别结果、专家回复等。将爬取的数据结构化存储到数据库和本地文件中。支持增量爬取,避免重复爬取已处理的内容。支持高并发、代理轮换,提升爬取效率和稳定性。提供日志记录和错误重试机制,保证爬虫的鲁棒性。 技术选型:语言:Python 3,网络请求:httpx、requests,数据库:PostgreSQL,并发处理:threading + ThreadPoolExecutor,定时任务:schedule,JSON处理:json,日志管理:logging,代理服务:自定义代理池服务(通过HTTP接口获取代理)
1020Python网络爬虫
KMblog 是一套面向交付的静态站点引擎,我们把“写作—构建—分发”整条链路打磨成一条可复制的 DevOps 流水线,让客户在零后端投入的前提下获得企业级性能与可维护性。 核心架构上,我们采用 Vue 3 + Vite 作为前端底座,利用 Vite 的原生 ESM 与 Rollup 双引擎,在开发阶段实现毫秒级热更新,在生产构建时则借助 Vite-SSG 预渲染全部页面,配合自动路由拆分与懒加载,首屏 JS 体积较传统方案缩减 60 % 以上。样式层使用 TailwindCSS 的 JIT 模式,按需原子类打包,最终产物 CSS < 10 kB;同时通过 PostCSS 插件链路自动处理浏览器前缀与压缩,无需额外配置即可满足 Lighthouse 95+ 的评分要求。 在内容处理层面,Markdown 通过统一的 remark-rehype 管道解析,抽象出可插拔的 AST 节点,任何自定义 Vue 组件都能以 `` 形式直接在正文中引用。构建时,我们利用 esbuild 将组件编译成异步 Chunk,运行时仅加载当前页面所需逻辑;全文搜索则基于 FlexSearch 离线索引,索引文件随构建产出,查询延迟稳定在 10 ms 以内,无需后端服务即可实现动态站点级别的搜索体验。 部署环节未来将内置 GitHub Actions 模板,流水线分为 Lint → Test → Build → Deploy 四阶段,平均耗时 90 秒即可完成一次灰度发布;产物可一键推送到 GitHub Pages、Vercel、Netlify 或任何支持静态托管的边缘节点,天然具备全球 CDN 缓存与 HTTPS 证书。 对客户而言,只需 fork 仓库、填写 `config.js` 中的品牌信息,即可在五分钟内获得一套可定制、可扩展、可自动交付的高性能博客系统;后续升级只需合并上游主干,CI 会自动回归测试并平滑发布,真正做到“写内容,不操心运维”。
1330Python博客
新抖网站数据爬虫(数据采集),根据提供的主持人数据,使用selenium库,模拟浏览器操作,搜索主持人并获取需要的数据,有效规避反爬措施。 爬取内容(以月为单位):直播次数、总音浪、总音浪合人民币、平均单次直播时长、场均直播音浪、场均直播音浪合人民币、单场参与人数峰值、最常直播时长及占比、最常直播时间点及占比、带货直播次数、带货直播次数占比、总上架商品数、总商品品类、总商品品牌数、总涉及平台数、top商品品类、top商品品牌、top平台及占比。 将爬取到的信息梳理,生成Excel文件,方便阅读、使用和整理。
1220Python爬虫
就是单纯的展示我有开发的能力以及技术,结合了html,python后端撰写的伪全栈开发,前后端不分离,服务器端渲染前端。采取redis的本地缓存技术存储验证码等数据进行验证,代码进行数据库数据自动写入修改。采用flask——Email包实现邮箱发送接受验证的功能,用以实现注册。采用css对页面进行渲染,使得页面更美观。
690Python网页开发工具
1.本项目简介:爬取飞瓜抖音网站,模拟浏览器操作,根据提供的主持人名单进行精确搜索、数据爬取,并将获取到的数据汇总,输出为Excel文件。 2、对飞瓜抖音网站进行搜索:按抖音号;飞瓜网站有反爬,不可以用selenium自动化登录,selenium打开后,配合手机扫描继续爬取。 3、爬取内容:名单中每个主持人的抖音名,抖音号,30天直播场次,30天直播销量,30天直播销售额,30天场均音浪(用于计算30天音浪增量)
1950Python爬虫
ReducePicSize是一个缩小图片尺寸的小工具。 它可以批量把整个文件夹下的所有图片,按照设置的尺寸进行批量缩小。 读取时可以勾选包含子文件夹。 处理图片时,会保持图片的长宽比例不变。 工具提供了 运行后,工具会把图片的长或宽缩小到指定的像素值。 比设置像素更小的图片不会被改变。 工具支持的图片格式包括:JPG, PNG, BMP, GIF, TIFF, WEBP
780Python图片处理
1.工具介绍 PicSearch是一个基于纹理图像内容进行搜索的工具,直接通过上传纹理照片或图片即可找到相似的图片结果。 提供石纹、木纹等各种纹理的产品搜索,能根据客户随意拍摄的照片或图片,帮助企业精确找到本地图库中的纹理图片。 2、使用步骤 (1)点击上传按钮选择需要搜索的图片 (2)选择需要搜索的图片库目录 (3)开始搜索 (4)系统自动分析图片特征 (5)搜索完毕后相似图片会显示在结果区域 (6)双击结果图片的名称,可以打开图片查看
860Python图像识别
在大型交通枢纽,业务拓展和旅客出行需求增长使车辆通行管理难题凸显。传统人工管理效率低,难以适应高强度运行;基于传统 AI 算法的检测系统在复杂条件下识别准确率低,无法提供精准数据;部分现有系统兼容性差,限制功能拓展;系统维护复杂,成本高且易因维护不及时影响运行。这些问题严重制约交通枢纽车辆管理的高效、准确和安全,急需新的解决方案。我们的系统主要具六大功能模块,分别是用户管理模块、数据分析模块、摄像头管理模块、监控检测模块、在线识别模块。
830Python网页(Webview)
项目为爬取网易音乐、爱奇艺、酷我、QQ音乐、虾米音乐、音悦台中的新歌数据,并将数据整合,存储并输出为Excel文件。 1、其中内容包括:新歌数据、歌曲评论数据、MV数据等 2、使用的爬虫技术包括: 后端爬虫:如requests库,根据发送HTTP请求,并解析返回的HTML内容。 前端爬虫:如使用Selenium工具,模拟浏览器操作,如表单提交等,获取网页数据。 3、获取数据之后,将数据整理并输出为Excel文件,更易使用。
1100Python爬虫
公司致力于各项软件开发项目,有多次大型政府项目系统开发经验,在软件开发项目上有丰富经验,研发及维护团队均是著名开发公司人员,致力于软件开发质量和服务的提升,软件开发是一个充满创造性和挑战性的领域,它将逻辑思维与解决问题能力相结合,旨在打造改善人们生活和工作的数字产品。它不仅仅关乎技术,更关乎团队协作、沟通和对用户需求的深刻理解。希望这篇介绍能为您打开一扇了解这个广阔世界的大门!
1130C#Android
1.项目基于开源项目ODOO定制开发。 2.项目具备完善的,高度可定制的权限管理机制。 3.项目高度模块化,可以根据用户需求任意增减模块。 4.项目集成了PaddleOCR模块,具备完善的文本识别功能。 5.项目具有完善的,高度定制的审批流程。 6.项目具有丰富的文档管理功能,可以方便高效的管理项目中的各种文档。 7.项目使用Python语言开发,可以方便的接入各种AI模块。
580Python工程项目管理
1. 基于WEB开发相关知识和工具,拟设计与实现一种晚点扩散仿真与分析系统,生成一个网页,为高铁网络晚点的问题的研究提供技术支撑。 2. 本项目采用前后端分离的B/S架构,主要使用的开发工具和技术栈如下: • 后端: o 编程语言:Python 3.8.20 o Web框架:Flask (轻量级Web服务框架) o 数据库:MySQL 5.7+ (关系型数据库,存储基础数据及分析结果) o 数据库连接库:Pymysql o 网络分析库:NetworkX (用于图的创建、操作、复杂网络指标计算等) o 核心算法库:random, collections.defaultdict (Python内置) o 其他库:requests (用于HTTP请求) • 前端: o 核心技术:HTML5, CSS3, JavaScript (ES6+) o 可视化库:ECharts (用于网络拓扑图、统计图表绘制和动态展示) • 开发环境与工具: o 操作系统:Windows o Python环境管理:Conda o IDE/编辑器:PyCharm • 数据存储: o 结构化数据:MySQL数据库 o 中间数据/缓存:JSON 文件 (例如,预处理后的网络拓扑数据、图表数据) 3. 系统主要包含以下三个核心功能模块: 1. 高铁网络结构分析模块: o 从数据库中读取高铁站点和线路数据,构建高铁网络模型(节点代表站点,边代表线路)。 o 计算网络的拓扑结构指标,包括:度分布、聚类系数、平均路径长度等。 o 对网络进行社团结构划分。 o 可视化展示:高铁网络拓扑结构图(节点可交互)、各类指标的统计图(如度分布直方图)、社团划分结果(在拓扑图上以不同颜色区分)。 2. 高铁网络晚点扩散模拟与分析模块: o 在已构建的高铁网络结构上,实现晚点扩散的仿真模拟。 o 支持采用SIS(易感-感染-易感)和SIR(易感-感染-移除/恢复)两种经典的传染病模型对晚点扩散进行建模。 o 用户可选择晚点源头节点,并可自定义参数。 o 动态展示晚点在网络中的扩散过程,标记出每一时间步的晚点节点和扩散路径。 o 统计并可视化展示每一时间步网络中晚点节点总数和未晚点节点总数的变化曲线。 o 用户可切换SIS/SIR模型进行对比分析。 3. 高铁网络关键节点识别模块: o 基于中心性的节点评估:  计算节点的度中心性 (Degree Centrality)。  计算节点的介数中心性 (Betweenness Centrality)。  计算节点的接近中心性 (Closeness Centrality)。  可视化展示各中心性指标的统计图或Top-N节点列表。 o 基于模拟统计的关键节点识别:  多次重复晚点扩散模拟过程(可设定不同源头或随机因素)。  统计在多次模拟中,各个节点发生晚点的总次数。  展示晚点次数最多的Top-10节点列表。 o 基于进化算法的最优免疫节点选择:  设定一组节点(例如10个)为免疫状态(这些节点不会发生晚点,也不会传播晚点)。  在设定免疫节点后,进行晚点扩散模拟,观察网络整体的晚点情况。  利用遗传算法 (Genetic Algorithm) 等进化计算方法,在所有可能的N个免疫节点组合中搜索,找出使得网络晚点影响(例如,总晚点节点数、晚点持续时间等)最小化的最优10个免疫节点组合。  展示算法给出的最优10个免疫节点列表。
990Pythonweb200.00元
1.面向对象: 开发、测试、运维,主要解决了快速定位linux操作系统的性能消耗情况,程序的CPU和内存使用趋势 2.与其它常规方案的差异: 通常的方案是使用top,查看linux服务器的cpu及内存使用情况,这种是每执行一次才输出一次资源的使用情况,无法定位到一个程序从开启到终止整个期间cpu和内存的使用情况。 本方案解决上了上述的问题,同时生成一个excel文档,里面记录了整个进程以及整体的cpu和内存使用情况。 3.技术选型: 监控终端使用了shell脚本 解析端使用了openpy + tkinter +ttkbootstrap + threading等技术。
2560Python操作系统工具
1.面向对象: 本方案面向测试工程师和运维工程师,主要是解决了测试linux操作系统上的一些程序的功能是否正常,判断该功能的输出及日志内容是否正确;以及自动生成Excel版和Word版测试报告; 2.与常规方案的差异: 本方案以简单易懂的程序界面,供测试工程师使用。测试工程师只需填写excel版的测试用例即可, 工具自动化执行测试用例里的内容,同时判断程序的输出内容以及日志内容是否跟预期一致,将判定结果、测试截图等一并写入到excel版、word版的测试报告中,测试工程师只需等待自动化测试结束后,查阅word版的测试报告即可。 3.技术选型: 采用了ttkbootstrap +tkinter + openpyxl + putty的telnet、ssh、串口 + pywinauto 等等技术。
1400Python终端/远程登录
PDF文件合并产品系统
极简操作:无需复杂的PDF软件,通过命令行即可快速调用。 保持原貌:在合并过程中,我会尽力保持原始文件的页面布局、文字、图片等所有内容完好无损。 智能排序:支持按文件名顺序、通过读取顺序的文件将其合并为一个PDF文件,确保页面顺序完全符合您的预期。 自由开源:基于成熟的Python库构建,安全透明,您可以放心使用。 使用场景: · 合并多个PDF文件或论文片段。 · 整合多次扫描的合同或证件。 · 将每周的报告合并为月度或年度总报告。 · 归档和整理网页上下载的零散PDF资料。
1300Python数据处理
深入研究直播通信协议,使用python框架构建高性能TCP客户端,稳定连接弹幕服务器,实现了礼物、评论等消息的实时解码、过滤与分发。增加绿幕播放视频 功能、键盘按键控制等功能,丰富了直播内容和玩法。消息通过队列进行流量削峰,确保后端游戏服务在高并发场景下的稳定性;基于Spigot/Paper服务端进行Java插件开发,采用事件驱动架构,将弹幕消息与游戏内事件动态绑定,创造了高度可互动的直播玩法
1020Python性能优化
企业ERP系统产品系统
本项目是一个基于Next.js开发的虾皮电商平台专用ERP管理系统,提供订单管理、入库管理、物流管理等功能。 ## 功能特点 - **入库管理**:管理产品入库流程,记录库存信息 - **订单管理**:处理订单,跟踪订单状态 - **待发货订单**:查看和处理待发货的订单 - **物流管理**:跟踪物流状态,管理物流信息 - **店铺管理**:管理多个店铺 - **系统设置**:配置系统参数 ## 技术栈 - **前端**:Next.js 14, React 18, TailwindCSS - **后端**:FastAPI (Python) - **数据库**:MySQL - **部署**:支持Docker容器部署 ## 安装与启动 ### 系统要求 - Node.js 18+ - PNPM (推荐) 或 NPM - MySQL 8.0+ - Python 3.8+ (后端) ### 安装步骤 1. 克隆本仓库 ``` git clone cd erp-system ``` 2. 安装前端依赖 ``` pnpm install ``` 3. 配置环境变量 创建`.env.local`文件并添加以下配置: ``` NODE_OPTIONS=--dns-result-order=ipv4first HOSTNAME=127.0.0.1 HOST=127.0.0.1 NEXT_PUBLIC_HOST=127.0.0.1 NEXT_PUBLIC_API_BASE_URL=http://127.0.0.1:8000/api/v1 NEXT_TELEMETRY_DISABLED=1 NEXT_PRIVATE_HOST=127.0.0.1 ``` 4. 启动后端服务器 ``` cd bak/backend uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload ``` 5. 启动前端开发服务器 ``` pnpm dev ``` 6. 访问系统 在浏览器中打开 [http://127.0.0.1:8090](http://127.0.0.1:8090) ### 使用快捷启动脚本 我们提供了多个批处理脚本,用于简化启动和修复过程: - `修复并启动.bat`:修复Radix UI问题并启动前端 - `直接进入系统.bat`:跳过登录直接进入系统 - `直接进入系统完整版.bat`:同时启动前后端并跳过登录 ## 项目结构 ``` erp-system/ │ ├── app/ # Next.js应用目录 │ ├── api/ # API路由和工具 │ ├── components/ # 公共组件 │ ├── context/ # 上下文管理 │ ├── inventory/ # 库存管理模块 │ ├── orders/ # 订单管理模块 │ ├── stocks/ # 入库管理模块(新) │ ├── shipping/ # 物流管理模块 │ ├── stores/ # 店铺管理模块 │ └── settings/ # 系统设置模块 │ ├── components/ # UI组件 │ ├── ui/ # UI基础组件 │ └── ... # 其他组件 │ ├── lib/ # 工具库 │ ├── bak/ # 备份和后端代码 │ └── backend/ # Python后端代码 │ ├── public/ # 静态资源 │ └── ... ``` ## API接口 系统主要使用以下API接口: - `/api/v1/stocks/`:入库管理相关API - `/api/v1/orders/`:订单管理相关API - `/api/v1/stores/`:店铺管理相关API - `/api/v1/shipping/`:物流管理相关API ## 常见问题解决 ### React无限循环渲染问题 如遇到"Maximum update depth exceeded"错误,请运行以下修复脚本: ``` node fix-presence-issue.js node fix-compose-refs.js ``` ### 数据库连接问题 如遇到数据库连接问题,请运行: ``` 修复数据库权限.bat ``` ## 贡献指南 如果您想为项目贡献代码,请遵循以下步骤: 1. Fork本仓库 2. 创建功能分支 (`git checkout -b feature/amazing-feature`) 3. 提交更改 (`git commit -m 'Add some amazing feature'`) 4. 推送到分支 (`git push origin feature/amazing-feature`) 5. 发起Pull Request
1520PythonERP
DrissionPage + FastAPI 独立打包成 EXE 方案 一、 项目架构与思路 核心思路是创建一个后台服务型应用: FastAPI 作为 HTTP 服务器,提供 RESTful API 接口。 DrissionPage 作为核心自动化引擎,在后台运行。 客户端(如 Web 前端、其他程序)通过调用 API 来触发浏览器自动化操作,无需关心底层实现。 使用 pyinstaller 将整个 Python 项目(FastAPI 服务器 + DrissionPage + 所有依赖)打包成一个独立的 exe 文件。 优势: 完全独立:最终用户无需安装 Python、浏览器驱动或任何依赖。 远程调用:可以通过网络 API 控制浏览器,实现分布式部署。 易于集成:任何能发送 HTTP 请求的语言都可以调用其功能。 二、 优化打包方式 (PyInstaller) 打包一个包含浏览器和网络请求的库非常复杂,需要精心配置。 1. 项目结构建议 text your_project/ ├── main.py # FastAPI 应用入口点 ├── core/ │ └── automation.py # 封装 DrissionPage 核心操作 ├── config.py # 配置文件 ├── requirements.txt # 项目依赖 └── build/ # 打包输出目录(自动生成) 2. 关键的 main.py 示例 (FastAPI Server) python from fastapi import FastAPI, HTTPException from fastapi.middleware.cors import CORSMiddleware import uvicorn from core.automation import AutomationManager # 导入封装好的自动化管理器 import asyncio app = FastAPI(title="DrissionPage Automation Service") # 解决跨域问题,方便前端调用 app.add_middleware( CORSMiddleware, allow_origins=["*"], # 生产环境应更严格 allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # 全局管理自动化实例 automation_manager = AutomationManager() @app.get("/") async def root(): return {"message": "DrissionPage Automation Service is Running"} @app.post("/start-session/") async def start_session(): """启动一个浏览器会话""" try: session_id = await automation_manager.start_new_session() return {"status": "success", "session_id": session_id, "message": "Session started"} except Exception as e: raise HTTPException(status_code=500, detail=f"Failed to start session: {str(e)}") @app.post("/run-script/{session_id}") async def run_script(session_id: str, script_name: str, params: dict = None): """在指定会话中运行预定义的脚本""" try: result = await automation_manager.run_script(session_id, script_name, params or {}) return {"status": "success", "data": result} except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @app.post("/close-session/{session_id}") async def close_session(session_id: str): """关闭指定浏览器会话""" try: await automation_manager.close_session(session_id) return {"status": "success", "message": f"Session {session_id} closed"} except Exception as e: raise HTTPException(status_code=500, detail=str(e)) if __name__ == "__main__": # 使用 uvicorn 直接运行,方便调试和打包 uvicorn.run(app, host="0.0.0.0", port=8000) 3. 核心自动化封装 core/automation.py python from DrissionPage import ChromiumPage, SessionPage import asyncio import uuid from typing import Dict, Any class AutomationManager: def __init__(self): self.sessions: Dict[str, ChromiumPage] = {} async def start_new_session(self) -> str: """异步方式启动新浏览器,避免阻塞主线程""" loop = asyncio.get_event_loop() # 将阻塞的初始化操作放到线程池中执行 page = await loop.run_in_executor(None, self._init_browser) session_id = str(uuid.uuid4()) self.sessions[session_id] = page return session_id def _init_browser(self): """同步初始化浏览器""" # 重要:配置浏览器路径和选项,避免打包后找不到 # 使用 False 防止自动打开浏览器窗口,适合后台运行 page = ChromiumPage(addr_driver_opts=False) # 或者使用无头模式,不显示图形界面 # page = ChromiumPage(addr_driver_opts=False, headless=True) return page async def run_script(self, session_id: str, script_name: str, params: dict) -> Any: """运行脚本""" if session_id not in self.sessions: raise ValueError(f"Session {session_id} not found") page = self.sessions[session_id] # 在这里定义你的各种自动化任务 if script_name == "baidu_search": return await self._baidu_search(page, params.get('keyword')) elif script_name == "get_page_title": return await self._get_page_title(page, params.get('url')) else: raise ValueError(f"Unknown script: {script_name}") async def _baidu_search(self, page: ChromiumPage, keyword: str): """示例任务:百度搜索""" loop = asyncio.get_event_loop() await loop.run_in_executor(None, self._sync_baidu_search, page, keyword) return f"Search for '{keyword}' completed." def _sync_baidu_search(self, page: ChromiumPage, keyword: str): """同步的搜索操作""" page.get('https://www.baidu.com') page.ele('#kw').input(keyword) page.ele('#su').click() page.wait.ele_displayed('#content_left') async def close_session(self, session_id: str): """关闭会话""" if session_id in self.sessions: page = self.sessions.pop(session_id) loop = asyncio.get_event_loop() await loop.run_in_executor(None, page.quit) 4. 打包配置:pyinstaller.spec 文件 (关键!) 手动创建或通过 pyinstaller main.py 生成后修改 spec 文件。 python # -*- mode: python ; coding: utf-8 -*- block_cipher = None a = Analysis( ['main.py'], pathex=[], binaries=[], # 必须手动添加 DrissionPage 和其他依赖 datas=[], hiddenimports=[ 'DrissionPage', 'fastapi', 'uvicorn', 'uvicorn.lifespan.on', 'uvicorn.lifespan.off', 'asyncio', # ... 其他可能缺失的库 ], hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False, ) # 必须包含 Chromium 驱动文件 import DrissionPage drission_path = os.path.dirname(DrissionPage.__file__) driver_files = [] # 尝试收集可能的驱动文件 possible_drivers = [ os.path.join(drission_path, 'chromedriver'), os.path.join(drission_path, 'geckodriver'), os.path.join(drission_path, 'msedgedriver'), ] for driver_path in possible_drivers: if os.path.exists(driver_path): driver_files.append((driver_path, '.')) if driver_files: a.datas.extend(driver_files) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE( pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name='main', # 输出 exe 的名称 debug=False, bootloader_ignore_signals=False, strip=False, upx=True, # 使用 upx 压缩,减小体积 upx_exclude=[], runtime_tmpdir=None, console=False, # 设置为 True 可以看到控制台日志,False 则作为后台程序运行 icon='icon.ico', # 可选的图标 ) 5. 打包命令 安装依赖:pip install pyinstaller fastapi uvicorn drissionpage 生成初始 spec:pyinstaller main.py 按照上述说明仔细修改生成的 main.spec 文件。 使用 spec 文件打包:pyinstaller main.spec 6. 打包后目录结构 text dist/ └── main/ # 打包生成的文件夹 ├── main.exe # 主可执行文件 ├── chromedriver.exe # PyInstaller 复制过来的驱动 ├── lib/ # 依赖库 └── ... # 其他文件 三、 调用方式 打包后的 exe 是一个独立的 HTTP 服务器。 1. 启动服务 双击运行 main.exe,它会启动一个本地服务器,默认监听 http://127.0.0.1:8000。 或者在命令行中运行 main.exe,以便查看日志输出。 2. API 调用示例 (使用 Python requests) 任何能发送 HTTP 请求的工具都可以调用,如 Postman、curl、或任何编程语言。 python import requests import json BASE_URL = "http://127.0.0.1:8000" # 1. 启动一个浏览器会话 response = requests.post(f"{BASE_URL}/start-session/") session_data = response.json() session_id = session_data['session_id'] print(f"Session ID: {session_id}") # 2. 执行一个自动化任务(例如百度搜索) payload = { "script_name": "baidu_search", "params": { "keyword": "DrissionPage" } } response = requests.post(f"{BASE_URL}/run-script/{session_id}", json=payload) print(response.json()) # 3. 执行另一个任务(例如获取页面标题) payload = { "script_name": "get_page_title", "params": { "url": "https://www.example.com" } } response = requests.post(f"{BASE_URL}/run-script/{session_id}", json=payload) print(response.json()) # 4. 任务完成后,关闭会话,释放资源 response = requests.post(f"{BASE_URL}/close-session/{session_id}") print(response.json()) 3. 查看 API 文档 服务启动后,打开浏览器访问 http://127.0.0.1:8000/docs 即可看到 FastAPI 自动生成的交互式 API 文档(Swagger UI),可以在这里直接测试接口。 四、 重要注意事项与优化提示 防逆向工程:pyinstaller 打包的 exe 容易被反编译。如需商业级保护,考虑使用 pyarmor 等工具进行代码加密。 杀毒软件误报:打包的 Python 程序,尤其是包含浏览器自动化功能的,极易被误报为病毒。需要对用户进行说明或购买商业证书进行签名。 体积优化:最终生成的 exe 会很大(通常 > 100MB),因为包含了 Python 解释器、所有库和浏览器驱动。使用 UPX 压缩可以略微减小体积。 无头模式 (Headless):在服务器部署或不需要图形界面的场景,务必在 _init_browser() 中启用 headless=True,性能更高且更稳定。 会话管理:上述示例使用了简单的内存字典管理会话。生产环境需要增加超时销毁机制,并考虑更持久化的管理方式(如数据库)。 错误日志:确保你的代码中有完善的日志记录(如使用 logging 模块),并将日志写入文件,以便排查打包后程序的运行问题。
1380Python爬虫
当前共6031个项目more
×
寻找源码
源码描述
联系方式
提交