Python开发表情包网站

『表情包』是一种利用图片来表示感情的方式。在各种社交软件的带动下,『表情包』已经形成了一种流行文化。互联网上,基本人人都会发表情;很多实时通讯软件中,『斗图』成为了一种活跃气氛的常见方式。不知你是否曾有过找不到表情包去应对别人的时候?
今天博主分享用Python开发个人专属的表情包网站的方法,想用什么表情包搜一下就有了!
目标:获取海量表情包,存入数据库,然后搭建简单网站,通过输入关键字获取对应的的表情包。


创建数据库

首先,我们要从这个网站爬取表情包:斗图啦
我们先来分析一下这个网页的源代码:

通过源码,我们可以发现需要获取的内容包括每个img标签的data-original和alt属性。通过爬虫获取网页,用正则表达式提取内容,然后存入数据库即可。
首先,安装mysql,如果你在使用macOS,并配置好了Homebrew:

1
brew install mysql

其它系统可参考文章MySQL 8.0的安装和使用
安装完成后,可能需要使用mysql.server start或者systemctl start mysqld等命令手动开启mysql服务。可以通过运行lsof -i:3306查看mysql是否正确工作在3306端口。初次登陆时可能需要用到MySQL生成的随机密码,查看方法是:

1
grep 'temporary password' /var/log/mysqld.log

然后使用以下命令登录:

1
2
mysql -u root -p
#按下回车后,输入密码,无回显

如果你登录后设置了新的root密码,一定要记住。
接下来,你可以用root,也可以创建一个新用户,来新建数据库和数据表,用来存放表情包:

1
2
3
4
5
6
7
8
9
10
CREATE DATABASE images;
#建立数据库images
USE images;
CREATE TABLE images (
id int(10) UNSIGNED PRIMARY KEY NOT NULL AUTO_INCREMENT,
name varchar(1000),
imageUrl varchar(200)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#然后在该数据库中新建一个表,并添加相应的name和imageUrl
QUIT;

至此数据库方面的工作就完成了。

获取海量表情包

创建python文件,并用python3执行(记得将密码换成你自己的):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/usr/bin/env python3

import requests
import re
import pymysql
# 连接数据库
db = pymysql.connect(
host = "127.0.0.1", # 主机,一般没有服务器就填本机吧
port = 3306, # 端口,mysql数据库的默认端口就是3306
db = "images", # 数据库名,与之前创建的相同
user = "username", # 用户名,如果是创建的用户需要在mysql中授权
passwd = "password", # 密码,换成你的
charset = "utf8"
)
# 创建cursor
cursor = db.cursor()
cursor.execute("select * from images")
# print(cursor.fetchall())
# 获取图片列表
def getImagesList(page):
# 获取斗图网源代码
html = requests.get("http://www.doutula.com/photo/list/?page={}".format(page), headers = { "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0" }).text
# 正则表达式 通配符 .*? 匹配所有 分组匹配
reg = r'data-original="(.*?)".*?alt="(.*?)"'
# 增加匹配效率的 S 多行匹配
reg = re.compile(reg,re.S)
imagesList = re.findall(reg,html) # 获取name和imageUrl
for i in imagesList:
image_url = i[0]
image_title = i[1]
# format 字符串格式化 %s
cursor.execute("insert into images values(null,'{}','{}') ".format(image_title, image_url))
print("正在保存 %s" % image_title)
db.commit()
# 截止目前,网站共有1600多页,如果未来有更新,可以手动改下面range的范围
for i in range(0,1650):
print("第{}页".format(i))
getImagesList(i)

db.close() # 不要忘记了关闭数据库连接

搭建网站前端

然后就是网站方面了,写一个简单的网站,实现输入关键字得到对应的图片。上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/usr/bin/env python3

from flask import Flask
from flask import render_template
from flask import request
import pymysql

app = Flask(__name__)
# 装饰器
@app.route("/") # route 路由
def index():
# return "hello world"
return render_template("index.html")
@app.route("/search")
def search():
# 接收用户关键字
keyword = request.args.get("kw")
count = request.args.get("count")
cursor.execute("select * from images where name like '%{}%'".format(keyword))
# 这里是一个模糊匹配,就是匹配和你输入的关键字类似的name,关键字是要用'%{}%'代替,用format传入
data = cursor.fetchmany(int(count))
# 这里fetchmany就是匹配count条数据库中的数据
return render_template("index.html", images = data)
# render_template模板能返回一个网页,而网页得存在新创建的templates文件夹里面才可以
# 程序的入口
if __name__ == "__main__":
db = pymysql.connect(
host = "127.0.0.1",
port = 3306,
db = "images",
user = "username",
passwd = "password", # 将密码换成你的
charset = "utf8",
cursorclass = pymysql.cursors.DictCursor # 这里默认从数据库中查到的数据返回回来是列表形式,这里改为了dict形式
)
# 创建cursor
cursor = db.cursor()
# 调试模式
# port 端口号 默认5000
app.run(debug = True, port = 5000, host = "0.0.0.0")

# index.html {{}}是放变量 {%%}是放方法

这里的host = "0.0.0.0"意味着程序将监听所有的流量,而不只是本机。
将这个文件命名为index.py。在这个py文件的同一目录下,新建文件夹,命名为templates,在该文件夹内创建index.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>斗图网站</title>
</head>
<body>
<form action="/search">
关键字:<input type="text" name="kw">
<br/>
查询的数量:<input type="text" name="count" value="100">
<br/>
<input type="submit" value="查询">
</form>

{% for i in images %}
<img src="{{i.imageUrl}}" alt="{{i.name}}"/>
{% endfor %}

</body>
</html>

完成后,回到上一目录,在命令行执行python3 index.py,然后访问localhost:5000即可开始斗图了!

其他设备获取本机IP后,通过5000端口也可以正常浏览。


参考文章:
关于Python爬虫之获取海量表情包+存入数据库+搭建网站通过关键字查询表情包
Python开发个人专属表情包网站,表情在手,天下我有

🍭支持一根棒棒糖!
0%