IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python_春联小工具 -> 正文阅读

[Python知识库]Python_春联小工具


前言

此次学flask框架是因为在csdn上看到了一个生成春联的文章(文章链接),感觉挺有意思的,自己的目的是把他做成小程序
理想功能:可以通过爬虫爬取某个网站上的对联文字,再通过python自动生成一副对联展示出来
每个用户点击小程序进去出现的对联都是随机的
每个用户可以自定义生成自己的对联

该小程序纯是写来自己玩,如果侵权了,我会及时删除

一、数据库配置文件

# 导入pymysql
import pymysql

# 创建链接
con = pymysql.connect(host='localhost', user='root', passwd='root', database='database', port=3306)
# 创建游标对象
cur = con.cursor()

# 执行sql
# 插入数据
def sqlInsertFun(upSpring, downSpring, acrossSpring):
    """
    :param upSpring:
    :param downSpring:
    :param acrossSpring:
    :return:
    """
    # 编写创建表的sql
    sqlInsert = 'insert into springText(springUp,springDown,springAcross) VALUES(%s,%s,%s)'
    try:
        cur.execute(sqlInsert, (upSpring, downSpring, acrossSpring))
        con.commit()
        print('插入成功')
        return '200'
    except Exception as erro:
        print(erro)
        con.rollback()
        print('执行错误')
        return erro


# 随机获取一条数据
def sqlSelectFun():
    """
    :return: 数据库随机的一条数据
    """
    sqlSelect = 'SELECT * FROM springText as t1 WHERE t1.id>=(RAND()*(SELECT MAX(id) FROM springText))LIMIT 1;'
    # 查询数据
    try:
        cur.execute(sqlSelect)
        springs = cur.fetchall()
        for spring in springs:
            springId = spring[0]
            springUp = spring[1]
            springDown = spring[2]
            springAcross = spring[3]
            return springId, springUp, springDown, springAcross
    except Exception as erro:
        print(erro)
        print('查询错误')
        return erro


二、爬取数据

写个爬虫,从网页上爬取数据,放到mysql数据库中

"""
1.先爬数据
2.筛选数据
3.把数据存到json文件中做测试
4.将数据导入到数据库
"""
# 调用sql处理文件
import sqlConfig
import requests
import re
from lxml import etree
import random


def func():
    url = 'http://www.360doc.com/content/16/0921/22/9570732_592642181.shtml'
    resp = requests.get(url)
    # 解析字符串格式的HTML文档对象,将传进去的字符串对象转换为_Element对象
    resp_html = etree.HTML(resp.text)
    springText = resp_html.xpath('//*[@id="artContent"]/p/text()')
    season_list = springText[1:]
    for season in season_list:
        result = re.sub(r'\d', "", season)
        result1 = result[1:]
        # result2 = re.search(r';', result1)
        res = result1.split(';')
        springUp = res[0]
        springDown = res[1]
        # print(springUp,springDown)
        across_list = ['虎虎生威', '瑞虎迎新', '如虎添翼', '虎年大吉']
        springAcross = across_list[random.randint(0, len(across_list)-1)]
        # print(springAcross)
        sqlConfig.sqlInsertFun(springUp, springDown, springAcross)


func()

三、制作春联

import io
from PIL import Image
import requests
import sqlConfig


def get_word(ch, quality):
    """获取单个汉字(字符)的图片
    ch          - 单个汉字或英文字母(仅支持大写)
    quality     - 单字分辨率,H-640像素,M-480像素,L-320像素
    """
    fp = io.BytesIO(requests.post(url='http://xufive.sdysit.com/tk', data={'ch': ch}).content)
    im = Image.open(fp)
    w, h = im.size
    if quality == 'M':
        w, h = int(w * 0.75), int(0.75 * h)
    elif quality == 'L':
        w, h = int(w * 0.5), int(0.5 * h)

    return im.resize((w, h))


def get_bg(quality):
    """获取春联背景的图片"""

    return get_word('bg', quality)


def write_couplets(text, HorV='V', quality='L', out_file=None):
    """生成春联
    text        - 春联内容,以空格断行
    HorV        - H-横排,V-竖排
    quality     - 单字分辨率,H-640像素,M-480像素,L-320像素
    out_file    - 输出文件名
    """
    usize = {'H': (640, 23), 'M': (480, 18), 'L': (320, 12)}
    bg_im = get_bg(quality)
    text_list = [list(item) for item in text.split()]
    rows = len(text_list)
    cols = max([len(item) for item in text_list])

    if HorV == 'V':
        ow, oh = 40 + rows * usize[quality][0] + (rows - 1) * 10, 40 + cols * usize[quality][0]
    else:
        ow, oh = 40 + cols * usize[quality][0], 40 + rows * usize[quality][0] + (rows - 1) * 10
    out_im = Image.new('RGBA', (ow, oh), '#f0f0f0')

    for row in range(rows):
        if HorV == 'V':
            row_im = Image.new('RGBA', (usize[quality][0], cols * usize[quality][0]), 'white')
            offset = (ow - (usize[quality][0] + 10) * (row + 1) - 10, 20)
        else:
            row_im = Image.new('RGBA', (cols * usize[quality][0], usize[quality][0]), 'white')
            offset = (20, 20 + (usize[quality][0] + 10) * row)

        for col, ch in enumerate(text_list[row]):
            if HorV == 'V':
                pos = (0, col * usize[quality][0])
            else:
                pos = (col * usize[quality][0], 0)

            ch_im = get_word(ch, quality)
            row_im.paste(bg_im, pos)
            row_im.paste(ch_im, (pos[0] + usize[quality][1], pos[1] + usize[quality][1]), mask=ch_im)

        out_im.paste(row_im, offset)

    if out_file:
        out_im.convert('RGB').save(out_file)
    out_im.show()


spring = sqlConfig.sqlSelectFun()
text0 = spring[1]
text1 = spring[2]
text2 = spring[3]
write_couplets(text0, HorV='V', quality='M', out_file='上批.jpg')
write_couplets(text1, HorV='V', quality='M', out_file='下批.jpg')
write_couplets(text2, HorV='H', quality='M', out_file='横批.jpg')

四、效果图

在这里插入图片描述
在这里插入图片描述

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-01-24 10:47:36  更:2022-01-24 10:49:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 1:51:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码