其实一天的热榜根本说明不了任何问题,而若每天都爬取一遍热榜,那么如何存储爬取到的数据,就成了一个问题。
python标准库中提供了轻量的文件型数据库sqlite3,就是为了这个问题而生的。因为热榜一共也就1000来篇博客,每天查一遍,10年也才不到4M条数据,sqlite3完全没问题。
选定使用数据库之后,首先就得设计表头。热榜的表头之前在存储csv的时候就已经写过了
["序号", "标题", "作者", "浏览", "评论", "收藏", "热度"]
考虑到领域热榜,那么还需要加上一个领域。
另外,如果每天都要查一遍的话,那么至少还得加上日期;如果每天不止查一遍,那就得加上时间了。
所以创建表头的方法如下
import sqlite3
conn = sqlite3.connect('heat.db')
# 此为表头
HEADS = 'create table heat (日期 int, 时间 int, 热榜 text, 序号 int, '
HEADS += '标题 text, 作者 text, 浏览 int, '
HEADS += '评论 int, 收藏 int, 热度 int)'
conn.execute(HEADS)
在正式接入框架之前,做一下功能测试还是十分有必要的。此前已经保存了csv格式的热榜数据,所以首先把这些数据读出来
import csv
with open('heat.csv', 'r', encoding='utf8') as f:
rs = [r for r in csv.reader(f)]
那么接下来就把这些热榜数据导入到数据库中,由于我们的数据非常整齐,和表头是完全一致的,所以插入函数相对简单
CODE = "insert into heat values (date('now'), time('now'), "
for r in rs[1:]:
c = CODE + f"'{r[0]}', {r[1]},'{r[2]}','{r[3]}',{r[4]},{r[5]},{r[6]},{r[7]})"
try:
conn.execute(c)
except:
continue
然后可以查看一下,比如想看看所有榜单中排名第一的博客
res = conn.execute('select 标题 from heat where 序号==1')
for r in res:
print(r)
内容如下
c++病毒/恶搞代码大全( 下 )
如何构建一个 NodeJS 影院微服务并使用 Docker 部署
【Python机器学习】实验12 基于神经网络的回归-分类实验
走近ChatGPT与类似产品:原理解析与比较
【状态模式】拯救if-else堆出来的屎山代码
码银送书第五期《互联网广告系统:架构、算法与智能化》
智能合约 – 常规漏洞分析 + 实例
搭建WebDAV服务手机ES文件浏览器远程访问
Android使用Gradle kotlin dsl 优雅配置构建项目
定量分析计算51单片机复位电路工作原理 怎么计算单片机复位电容和电阻大小
SSH公网远程直连Docker容器
内网穿透——使用Windows自带的网站程序建立网站
Spring Boot单元测试使用MockBean注解向Service注入Mock对象
【Unity每日一记】向量操作摄像机的移动(向量加减)
网络安全(黑客)自学
【Linux】超详细的Linux实用操作《文末送书》
最后,测试完毕,需要安全退出数据库,只需调用commit和close,前者用于保存,后者用于退出。
conn.commit()
conn.close()
然后可以进入sqlite3查看一下
>sqlite3 heat.db
SQLite version 3.39.3 2022-09-05 11:02:23
Enter ".help" for usage hints.
sqlite> .tables
heat
sqlite> select 标题 from heat where 序号==1;
c++病毒/恶搞代码大全( 下 )
如何构建一个 NodeJS 影院微服务并使用 Docker 部署
【Python机器学习】实验12 基于神经网络的回归-分类实验
走近ChatGPT与类似产品:原理解析与比较
【状态模式】拯救if-else堆出来的屎山代码
码银送书第五期《互联网广告系统:架构、算法与智能化》
-- 略