39.6月3日 综合项目:ubuntu计划任务实现UP主粉丝增量分析
在之前的项目中,我们完成了UP主全数据爬取、基础数据分析、UP主选题分析、受众播赞比分析、视频封面画像拼图展示等。



相较于市面上的成熟商用网站,目前还欠缺一个重要功能,就是记录并分析UP主的粉丝增量数据。
有了这个数据,就可以更好的分析热点话题,新视频受众认可度等。对UP主的选题提供清晰的思路。
由于粉丝增量数据是一个长周期的动态数据。不可能通过一个爬虫获取。
故需要将爬虫脚本放在服务器上,进行定时的爬取UP主粉丝数据,
从而分析一个周期内UP主的粉丝增量情况。
同时我们需要使用数据库存储每次获取到的数据。
本次我们使用sqlite 轻量化数据库
Sqlite数据库
SQLite和MySQL是两种广泛使用的数据库管理系统,但它们在设计、用途和功能方面有显著的不同。以下是SQLite和MySQL之间的一些主要对比:
-
架构:
- SQLite: 轻量级,文件系统基础,通常存储在单一文件中。
- MySQL: 完整的数据库服务器,需要服务器进程和客户端库。
-
用途:
- SQLite: 适合小型应用、移动应用、桌面应用、原型开发。
- MySQL: 适合大型应用、企业级应用、需要高并发和多用户支持的场景。
-
性能:
- SQLite: 在低到中等负载下表现良好,但不适合高并发环境。
- MySQL: 优化的查询处理和缓存机制,适合处理大规模数据和高并发请求。
简而言之,SQLite是一个简单、轻量级的嵌入式数据库,适合轻量级应用;而MySQL是一个功能强大的数据库服务器,适合需要复杂查询、高并发和可扩展性的应用。
连接ubuntu 服务器
略
安装
sudo apt install sqlite3 libsqlite3-dev
创建数据库文件
sqlite3 mydatabase.db
这将创建一个名为mydatabase.db的文件,并打开一个SQLite会话。
创建表,表结构为,序号、日期、粉丝数量。
表名称为UP主名称,以下以小约翰可汗为例:
CREATE TABLE xiaoyuehan (
id INTEGER PRIMARY KEY,
date DATE,
followers_count INTEGER
);
完成后测试加入数据:
INSERT INTO xiaoyuehan (date, followers_count) VALUES (DATE('now'), 30);
测试查询:
select * from xiaoyuehan;
推出
.exit
Ubuntu搭建python 运行环境
在Ubuntu上搭建Python运行环境,你可以遵循以下步骤:
1. 安装Python
sudo apt install python3 python3-pip
2. 验证安装
安装完成后,检查Python版本:
python3 --version
3. 安装Python包
使用pip安装所需的Python包。例如,安装 xxxxxx库:
pip3 install xxxxxxxxxxxxxxxx
编写代码获取UP主每日的粉丝数量
引入库
由于本次不需要使用到浏览器,故使用SessionPage即可
from DrissionPage import SessionPage
import json
构建请求对象,并请求链接
page = SessionPage()
page.get("https://api.bilibili.com/x/relation/stat?vmid=2435767")
解析结果
tmp=page.html
UP_json=json.loads(tmp)
print(UP_json)

获取粉丝数量
follower=UP_json['data']['follower']
将粉丝数存储入sqlite
注意!!!
windows上面未安装sqlite,执行会报错,故需要在ubuntu上进行执行。
import sqlite3
conn = sqlite3.connect('mydatabase.db')
cursor = conn.cursor()
# 插入数据
sql_str="INSERT INTO xiaoyuehan (date, followers_count) VALUES (datetime('now'), "+str(follower)+")"
print(sql_str)
cursor.execute(sql_str)
# 提交事务
conn.commit()
# 关闭连接
cursor.close()
conn.close()
print("数据已存储到SQLite数据库中")
查看数据库结果
xiandai@xiandai-pc:~$ sqlite3 mydatabase.db
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite> select * from xiaoyuehan;
1|2024-06-02 13:19:57|1582289
2|2024-06-02 13:20:01|1582289
sqlite> .exit
xiandai@xiandai-pc:~$
通过计划任务定时执行python脚本
在Ubuntu上,你可以使用 cron来设置计划任务,以定时执行Python脚本。以下是设置步骤:
1. 打开终端
2. 编辑当前用户的cron任务列表
crontab -e
3. 添加cron任务
在打开的cron任务列表中,添加一行来定义你的任务。cron的基本格式如下:
分钟 小时 日期 月份 星期 命令
例如,如果你希望每天早上8点运行脚本,可以添加如下行:
0 8 * * * python3 /home/xiandai/爬取粉丝数.py
其中的* 表示任意
4. 保存并关闭编辑器
保存更改后,cron会自动安装新的cron任务。
5. 检查cron服务状态
确保cron服务正在运行:
sudo systemctl restart cron
sudo systemctl status cron
cron 举例并辨析
-
每小时执行一次
0 * * * * python3 /home/xiandai/crawl_fans_count.py -
每天午夜(00:00)执行
0 0 * * * python3 /home/xiandai/crawl_fans_count.py -
每个工作日(周一到周五)的上午9点和下午5点
0 9,17 * * 1-5 python3 /home/xiandai/crawl_fans_count.py -
每个星期六和星期日的午夜
0 0 * * 6,0 python3 /home/xiandai/crawl_fans_count.py -
每周一上午8点,周三中午12点,周五下午3点
0 8 * * 1 python3 /home/xiandai/crawl_fans_count.py 0 12 * * 3 python3 /home/xiandai/crawl_fans_count.py 0 15 * * 5 python3 /home/xiandai/crawl_fans_count.py -
每15分钟执行一次
*/15 * * * * python3 /home/xiandai/crawl_fans_count.py
请注意,cron表达式的格式非常重要,错误的时间设置可能导致任务不按预期执行。另外,确保脚本路径和Python解释器路径是正确的,并且Python脚本具有执行权限。
程序存在的问题
运行后发现,存储到sqlite中的时间不对。
核对后发现,比真实时间早了8小时,是时区错误。中国使用的UTC+8时区。
故代码需要进行修改
from datetime import datetime, timedelta
# ....
# 获取当前UTC时间并转换为UTC+8时区
utc_now = datetime.utcnow()
utc_plus_8 = utc_now + timedelta(hours=8)
formatted_time = utc_plus_8.strftime('%Y-%m-%d %H:%M:%S')
# ....
# 插入数据
sql_str = f"INSERT INTO xiaoyuehan (date, followers_count) VALUES ('{formatted_time}', {follower})"
调整后时间应该是正确的