历史上的今天
如果要在网页上显示一些随机的语句,获得一些人生的经验,你会选择什么?
也许,一言是一个很好的选择,它可以提供一些动漫中的台词,或是网络上的各种小段子。
在前面的文章有趣的 Linux 命令行工具中提到的 fortune
命令或许也可以满足需求,pure-ftpd
就可以设置在连接成功时显示随机的来自 fortune
的语句。
那除此之外呢?历史上的今天是一个不错的方案。当你访问一些门户网站的首页,有时会看到这样的栏目。它也是一些百科全书网站,比如维基百科的传统。事实上,在 Mac 上就自带了一个小型的「历史上的今天」数据库,执行:1
cat /usr/share/calendar/calendar.history
就可以看到。
这篇文章将介绍如何搭建一个提供「历史上的今天」信息的 API。
建立数据库
首先,建立 MySQL 数据库和数据表,用于存储爬取的信息。这里数据库和数据表名都以 event
为例。1
2
3
4
5
6
7
8
9
10CREATE DATABASE event;
USE event;
CREATE TABLE event (
id int(10) UNSIGNED PRIMARY KEY NOT NULL AUTO_INCREMENT,
type int(1) DEFAULT NULL,
year varchar(6) DEFAULT NULL,
date varchar(6) DEFAULT NULL,
info text DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
QUIT;
获取数据
数据来源是维基百科,使用 Python 爬取数据,并存入数据库中。项目地址:TodayInHistory-Crawler,可以打包下载所有文件。
下载程序源码后,进入目录并安装依赖:1
pip3 install -r requirements.txt
config.py
中的 username
、password
、dbname
和 tablename
分别是你的登录用户名、密码、数据库名和数据表名。将它们修改成和之前创建的数据库和数据表名一致。
然后,运行 spider.py
,程序将会开始爬取数据。程序会用 try except
处理特殊字符(非 UTF-8 范围)的问题,并将失败的项目记录在 failed.txt
中。
查询数据
比较简单的方式是按照 json 格式进行输出,server.py
给出了一种使用 Python 的方案,运行后就可以访问 Flask 创建的服务器了。