当前位置:网站首页 >  教程

手把手搭建线上推广流量追踪与自动分发系统实操

时间:2026年06月09日 07:42:08 来源:易频IT社区

一、环境准备与依赖安装

在开始构建流量追踪系统之前,需要确保服务器或本地环境已经安装了Python运行环境。本系统基于Flask框架开发,轻量且易于部署,适合快速上手。

1. 基础环境检查

首先检查Python版本,建议使用Python 3.8及以上版本以确保依赖库的兼容性。在终端执行以下命令:

```bash python3 --version ```

如果未安装Python,请使用系统对应的包管理器进行安装,例如在Ubuntu环境下执行:

```bash sudo apt-get update sudo apt-get install python3 python3-pip ```

2. 创建项目目录结构

为了保持项目整洁,我们需要创建一个独立的目录来存放代码和日志文件。执行以下命令:

```bash mkdir traffic_tracker cd traffic_tracker mkdir logs ```

这里创建了一个名为logs的子目录,专门用于存储后续产生的流量数据文件。

3. 安装核心依赖库

本系统主要依赖Flask作为Web框架,并使用Gunicorn作为生产环境的服务器。为了管理时间,我们还会用到python-dateutil。直接执行安装命令:

```bash pip3 install flask gunicorn python-dateutil ```

如果安装速度较慢,可以使用国内镜像源加速:

```bash pip3 install flask gunicorn python-dateutil -i https://pypi.tuna.tsinghua.edu.cn/simple ```

二、系统配置与核心代码实现

系统的主要逻辑是:接收带有UTM参数的推广链接请求 -> 解析参数并记录到日志文件 -> 将用户重定向到目标落地页。以下是完整的代码实现。

1. 配置文件编写 (config.py)

创建一个config.py文件,将系统可配置项抽离出来,方便后续维护。请直接复制以下内容:

```python config.py 目标落地页地址,所有推广流量最终都会跳转到这个页面 TARGET_URL = "https://www.example.com/landing-page" 日志文件存储路径 LOG_FILE_PATH = "./logs/traffic_data.csv" 日志文件表头,第一次运行时会自动写入 CSV_HEADERS = ["timestamp", "ip_address", "utm_source", "utm_medium", "utm_campaign", "utm_term", "utm_content", "user_agent"] 服务监听端口 PORT = 5000 ```

注意:请将TARGET_URL修改为您实际业务的落地页地址。

2. 核心逻辑实现 (app.py)

在同级目录下创建app.py,这是系统的入口文件。代码包含参数解析、CSV文件写入和重定向逻辑。

```python app.py import os import csv import time from datetime import datetime from flask import Flask, request, redirect from config import TARGET_URL, LOG_FILE_PATH, CSV_HEADERS app = Flask(__name__) def ensure_log_file_exists(): """检查并初始化日志文件,确保表头存在""" if not os.path.exists(LOG_FILE_PATH): with open(LOG_FILE_PATH, mode='w', encoding='utf-8') as f: writer = csv.writer(f) writer.writerow(CSV_HEADERS) def log_traffic_data(data): """将流量数据追加写入CSV文件""" try: 'a'模式表示追加写入,newline=''防止在Windows下出现空行 with open(LOG_FILE_PATH, mode='a', encoding='utf-8', newline='') as f: writer = csv.writer(f) writer.writerow(data) except Exception as e: print(f"日志写入失败: {e}") @app.route('/') def track_and_redirect(): 1. 获取客户端IP ip_address = request.headers.get('X-Forwarded-For', request.remote_addr) 2. 获取UTM参数,如果不存在则设为 'unknown' utm_source = request.args.get('utm_source', 'unknown') utm_medium = request.args.get('utm_medium', 'unknown') utm_campaign = request.args.get('utm_campaign', 'unknown') utm_term = request.args.get('utm_term', '') utm_content = request.args.get('utm_content', '') 3. 获取User-Agent user_agent = request.headers.get('User-Agent', '') 4. 获取当前时间戳 timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S') 5. 组装数据行 row_data = [ timestamp, ip_address, utm_source, utm_medium, utm_campaign, utm_term, utm_content, user_agent ] 6. 写入日志 ensure_log_file_exists() log_traffic_data(row_data) 7. 执行302重定向到目标页面 return redirect(TARGET_URL) if __name__ == '__main__': 确保日志目录存在 os.makedirs(os.path.dirname(LOG_FILE_PATH), exist_ok=True) ensure_log_file_exists() app.run(host='0.0.0.0', port=5000) ```

三、服务启动与测试验证

代码编写完成后,我们需要启动服务并进行模拟测试,确保数据能够被正确记录。

1. 本地测试启动

在项目根目录下执行以下命令启动服务:

```bash python3 app.py ```

手把手搭建线上推广流量追踪与自动分发系统实操

终端显示Running on http://0.0.0.0:5000即表示启动成功。

2. 模拟流量请求测试

打开新的终端窗口,使用curl命令模拟带有推广参数的访问请求:

```bash curl "http://127.0.0.1:5000/?utm_source=google&utm_medium=cpc&utm_campaign=spring_sale" ```

执行后,检查logs/traffic_data.csv文件内容。可以使用cat命令查看:

```bash cat logs/traffic_data.csv ```

您应该能看到一行包含刚才传入的时间戳、IP、google、cpc等信息的记录。如果看到HTTP 302响应跳转到了配置的TARGET_URL,说明逻辑正常。

四、生产环境部署配置

在本地测试通过后,如果需要部署到服务器供外部访问,建议使用Gunicorn作为WSGI服务器,它能提供更高的并发性能和稳定性。

1. 使用Gunicorn启动

直接使用以下命令启动,-w指定工作进程数(建议设置为CPU核心数的2-4倍),-b指定绑定地址:

```bash gunicorn -w 4 -b 0.0.0.0:5000 app:app ```

2. 配置后台运行与自动重启

为了保证服务关闭后依然运行,并实现崩溃自动重启,建议结合supervisor进行管理。首先安装supervisor:

```bash sudo apt-get install supervisor ```

创建配置文件/etc/supervisor/conf.d/traffic_tracker.conf

```ini [program:traffic_tracker] command=/usr/local/bin/gunicorn -w 4 -b 0.0.0.0:5000 app:app directory=/root/traffic_tracker user=root autostart=true autorestart=true stderr_logfile=/var/log/traffic_tracker.err.log stdout_logfile=/var/log/traffic_tracker.out.log ```

注意:请将directory修改为您实际的项目路径。保存后执行以下命令生效:

```bash sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start traffic_tracker ```

五、数据清洗与分析脚本

随着流量数据的积累,CSV文件会变大。为了方便查看各渠道的推广效果,我们可以编写一个简单的Python脚本进行数据统计。

创建analyze.py

```python analyze.py import csv from collections import Counter LOG_FILE = "./logs/traffic_data.csv" def analyze_sources(): data = [] if not os.path.exists(LOG_FILE): print("日志文件不存在") return with open(LOG_FILE, mode='r', encoding='utf-8') as f: reader = csv.DictReader(f) for row in reader: data.append(row) if not data: print("暂无数据") return 统计 utm_source 来源分布 sources = [row['utm_source'] for row in data] source_counts = Counter(sources) print(f"总访问量: {len(data)}") print("\n 来源渠道统计 ") for source, count in source_counts.most_common(): print(f"{source}: {count} 次 ({round(count/len(data)100, 2)}%)") 统计 utm_campaign 活动分布 campaigns = [row['utm_campaign'] for row in data] campaign_counts = Counter(campaigns) print("\n 推广活动统计 ") for campaign, count in campaign_counts.most_common(): print(f"{campaign}: {count} 次") if __name__ == "__main__": import os analyze_sources() ```

执行分析脚本即可快速查看流量汇总:

```bash python3 analyze.py ```

通过以上步骤,您已经完成了一套从流量采集、存储到分析的完整闭环系统。在实际推广中,只需将推广链接中的URL替换为该服务器的地址,并附带相应的UTM参数即可。例如:http://your-server-ip:5000/?utm_source=wechat&utm_medium=post

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图