当前位置:   article > 正文

python爬虫制作古诗或者藏头诗_python创作诗词并出题给出的分

python创作诗词并出题给出的分

昨天晚上,见到室友发了一条非常文艺的诗句说说,我就想,我这文采是不行了,但是机器应该可以。我今天就做了个非常简单的诗歌编辑脚本。过于简陋,仅供参考。


前言

中国古诗词,是中华文化的特色,也是高级语言的一种表达。今天我就壮着胆子表现一下。


提示:以下是本篇文章正文内容,下面案例可供参考

一、制作古诗或者藏头诗?

我先说一下我的思路:
1.从网络上爬取古诗词
2.对古诗词进行处理,只保留5言或7言的句子
3.通过随机组合成诗句

二、使用步骤

1.引入库

我们所用到的库是经常使用的:

import requests
from lxml import etree
import time
import random
  • 1
  • 2
  • 3
  • 4

2.爬取古诗词网

之所以爬取两个url是因为,处理后可用的诗词句太少了,所以多方面获取,这个诗词句文件内容越多越好(这样爬取会有干扰需自己手动处理):

def get_shici():
    """
    获取诗词网的数据
    """
    for i in range(1, 21):
        # 获取url
        url = "https://so.gushiwen.cn/shiwen/default_0AA{}.aspx".format(i)
        # 获取网页数据
        html = requests.get(url).text
        # text格式转为HTML格式
        html = etree.HTML(html)
        # 通过xpath定位需要的信息 (返回的是一个列表)
        shi_poem = html.xpath(
            '//div[@class="main3"]/div[@class="left"]/div[@class="sons"]/div[@class="cont"]/div[@class="contson"]/text()')
        # 遍历数据
        for url_data in shi_poem:
            # 转为字符串并去除空格
            strs = "".join(url_data)
            # 判断是否有数据
            if strs.isascii() == 0:
                # 保存数据
                with open("gushi.txt", "a", encoding="utf-8") as f:
                    f.write(strs.strip() + "\n")
        print("正在下载第{}页的古诗".format(i))
        # 延时2秒
        time.sleep(2)
    for i in range(1, 6):
        # 获取url
        url = "https://so.gushiwen.cn/mingjus/default.aspx?page={}".format(i)
        # 获取网页数据
        html = requests.get(url).text
        # text格式转为HTML格式
        html = etree.HTML(html)
        # 通过xpath定位需要的信息 (返回的是一个列表)
        shi_poem = html.xpath(
            '//*[@id="html"]/body/div[2]/div[1]/div[2]/div/a[1]/text()')
        # 遍历数据
        for url_data in shi_poem:
            # 转为字符串并去除空格
            strs = "".join(url_data)
            # 判断是否有数据
            if strs.isascii() == 0:
                # 保存数据
                with open("gushi.txt", "a", encoding="utf-8") as f:
                    f.write(strs.strip() + "\n")
        print("正在下载第{}页的古诗".format(i))
        # 延时2秒
        time.sleep(2)
    print("下载完成!!!")

  • 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
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50

3.读取文件并处理文件

知识涉及太少,也没有很好的处理方法,就只有最原始的硬解

# 读取文件
with open("gushi.txt", "r", encoding="utf-8") as f:
    poems = f.read()
# 对文件处理  暂时没有想到更好的方法
# 把所有的 。 ? ! 转换为 ,号
poems = poems.replace("。", ",")
poems = poems.replace("?", ",")
poems = poems.replace("!", ",")
# 以 , 号分割
lines = poems.split(",")
# 去除长度不是5个字或7个字的字符串
lines = [i.strip() for i in lines if len(i.strip()) == 5 or len(i.strip()) == 7]
# 先转为集合去重 再换回来
lines = list(set(lines))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

4.诗句创作

还是知识涉及太少,怎么也没有想到诗句的对仗方法,所以这程序是没有押韵效果的,个人觉得有点鸡肋。

def get_wuyanshi():
    """
    5言诗句创建
    """
    # 定义一个列表用来存储诗句
    lie = []
    # 随机产生4句或者8句的诗句
    cheng = 4 * random.randint(1, 2)
    # 循环添加
    while len(lie) < cheng:
        # 随机选取一条诗句
        juzi = lines[random.randint(0, len(lines) - 1)]
        # 判断长度是否为5个字
        if len(juzi) == 5:
            # 满足就添加
            lie.append(juzi)
    # 遍历数据结果
    for i in lie:
        print(i)


def get_qiyanshi():
    """
    5言诗句创建
    """
    # 定义一个列表用来存储诗句
    lie = []
    # 随机产生4句或者8句的诗句
    cheng = 4 * random.randint(1, 2)
    # 循环添加
    while len(lie) < cheng:
        # 随机选取一条诗句
        juzi = lines[random.randint(0, len(lines) - 1)]
        # 判断长度是否为7个字
        if len(juzi) == 7:
            # 满足就添加
            lie.append(juzi)
    # 遍历数据结果
    for i in lie:
        print(i)


def get_cangtoushi(strs):
    """
    依据藏头词进行造诗
    :param strs: 藏头词
    """
    # 随机产生5言或者7言诗
    chang = random.randint(2, 3) * 2 + 1
    # 循环遍历藏头词
    for i in strs:
        # 用来存储创造出来的诗句
        lie = []
        # 遍历匹配符合要求的诗句
        for j in lines:
            # 诗句开头符合对应的藏头词 并且统一格式5言或7if j[0] == i and len(j) == chang:
                lie.append(j)
        # 判断是否有符合要求的诗句
        if len(lie) > 0:
            # 多个符合要求的随机选泽一个
            print(lie[random.randint(0, len(lie) - 1)])
        else:
            print("没有合适的句子匹配。")


def get_cangweishi(strs):
    """
    依据藏尾词进行造诗
    :param strs: 藏尾词
    """
    # 随机产生5言或者7言诗
    chang = random.randint(2, 3) * 2 + 1
    # 循环遍历藏头词
    for i in strs:
        # 用来存储创造出来的诗句
        lie = []
        # 遍历匹配符合要求的诗句
        for j in lines:
            # 诗句结尾符合对应的藏尾词 并且统一格式5言或7if j[-1] == i and len(j) == chang:
                lie.append(j)
        # 判断是否有符合要求的诗句
        if len(lie) > 0:
            # 多个符合要求的随机选泽一个
            print(lie[random.randint(0, len(lie) - 1)])
        else:
            print("没有合适的句子匹配。")

  • 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
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89

5.完整代码

不多说啥了,咱的这技术过于丢人,也只能厚着脸皮发出来了。见谅见谅。

import requests
from lxml import etree
import time
import random


def get_shici():
    """
    获取诗词网的数据
    """
    for i in range(1, 21):
        # 获取url
        url = "https://so.gushiwen.cn/shiwen/default_0AA{}.aspx".format(i)
        # 获取网页数据
        html = requests.get(url).text
        # text格式转为HTML格式
        html = etree.HTML(html)
        # 通过xpath定位需要的信息 (返回的是一个列表)
        shi_poem = html.xpath(
            '//div[@class="main3"]/div[@class="left"]/div[@class="sons"]/div[@class="cont"]/div[@class="contson"]/text()')
        # 遍历数据
        for url_data in shi_poem:
            # 转为字符串并去除空格
            strs = "".join(url_data)
            # 判断是否有数据
            if strs.isascii() == 0:
                # 保存数据
                with open("gushi.txt", "a", encoding="utf-8") as f:
                    f.write(strs.strip() + "\n")
        print("正在下载第{}页的古诗".format(i))
        # 延时2秒
        time.sleep(2)
    for i in range(1, 6):
        # 获取url
        url = "https://so.gushiwen.cn/mingjus/default.aspx?page={}".format(i)
        # 获取网页数据
        html = requests.get(url).text
        # text格式转为HTML格式
        html = etree.HTML(html)
        # 通过xpath定位需要的信息 (返回的是一个列表)
        shi_poem = html.xpath(
            '//*[@id="html"]/body/div[2]/div[1]/div[2]/div/a[1]/text()')
        # 遍历数据
        for url_data in shi_poem:
            # 转为字符串并去除空格
            strs = "".join(url_data)
            # 判断是否有数据
            if strs.isascii() == 0:
                # 保存数据
                with open("gushi.txt", "a", encoding="utf-8") as f:
                    f.write(strs.strip() + "\n")
        print("正在下载第{}页的古诗".format(i))
        # 延时2秒
        time.sleep(2)
    print("下载完成!!!")


# 读取文件
with open("gushi.txt", "r", encoding="utf-8") as f:
    poems = f.read()
# 对文件处理  暂时没有想到更好的方法
# 把所有的 。 ? ! 转换为 ,号
poems = poems.replace("。", ",")
poems = poems.replace("?", ",")
poems = poems.replace("!", ",")
# 以 , 号分割
lines = poems.split(",")
# 去除长度不是5个字或7个字的字符串
lines = [i.strip() for i in lines if len(i.strip()) == 5 or len(i.strip()) == 7]
# 先转为集合去重 再换回来
lines = list(set(lines))


def get_wuyanshi():
    """
    5言诗句创建
    """
    # 定义一个列表用来存储诗句
    lie = []
    # 随机产生4句或者8句的诗句
    cheng = 4 * random.randint(1, 2)
    # 循环添加
    while len(lie) < cheng:
        # 随机选取一条诗句
        juzi = lines[random.randint(0, len(lines) - 1)]
        # 判断长度是否为5个字
        if len(juzi) == 5:
            # 满足就添加
            lie.append(juzi)
    # 遍历数据结果
    for i in lie:
        print(i)


def get_qiyanshi():
    """
    5言诗句创建
    """
    # 定义一个列表用来存储诗句
    lie = []
    # 随机产生4句或者8句的诗句
    cheng = 4 * random.randint(1, 2)
    # 循环添加
    while len(lie) < cheng:
        # 随机选取一条诗句
        juzi = lines[random.randint(0, len(lines) - 1)]
        # 判断长度是否为7个字
        if len(juzi) == 7:
            # 满足就添加
            lie.append(juzi)
    # 遍历数据结果
    for i in lie:
        print(i)


def get_cangtoushi(strs):
    """
    依据藏头词进行造诗
    :param strs: 藏头词
    """
    # 随机产生5言或者7言诗
    chang = random.randint(2, 3) * 2 + 1
    # 循环遍历藏头词
    for i in strs:
        # 用来存储创造出来的诗句
        lie = []
        # 遍历匹配符合要求的诗句
        for j in lines:
            # 诗句开头符合对应的藏头词 并且统一格式5言或7if j[0] == i and len(j) == chang:
                lie.append(j)
        # 判断是否有符合要求的诗句
        if len(lie) > 0:
            # 多个符合要求的随机选泽一个
            print(lie[random.randint(0, len(lie) - 1)])
        else:
            print("没有合适的句子匹配。")


def get_cangweishi(strs):
    """
    依据藏尾词进行造诗
    :param strs: 藏尾词
    """
    # 随机产生5言或者7言诗
    chang = random.randint(2, 3) * 2 + 1
    # 循环遍历藏头词
    for i in strs:
        # 用来存储创造出来的诗句
        lie = []
        # 遍历匹配符合要求的诗句
        for j in lines:
            # 诗句结尾符合对应的藏尾词 并且统一格式5言或7if j[-1] == i and len(j) == chang:
                lie.append(j)
        # 判断是否有符合要求的诗句
        if len(lie) > 0:
            # 多个符合要求的随机选泽一个
            print(lie[random.randint(0, len(lie) - 1)])
        else:
            print("没有合适的句子匹配。")


while True:
    print("本软件可以实现:1、自动生成5言诗句 2、自动生成7言诗句 3、藏头诗 4、藏尾诗 5、退出")
    number = input("请输入你要实现的功能(输入数字):")
    if number not in ["1", "2", "3", "4", "5"]:
        print("您的输入不符合要求!!!")
    elif number == "1":
        get_wuyanshi()
    elif number == "2":
        get_qiyanshi()
    elif number == "3":
        uesr_lien = input("请输入您的藏头词:")
        get_cangtoushi(uesr_lien)
    elif number == "4":
        uesr_lien = input("请输入您的藏尾词:")
        get_cangweishi(uesr_lien)
    else:
        break

  • 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
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181

欢迎大家指点错误,或者优化。


总结

不断地学习,不断地变强

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/888414
推荐阅读
相关标签
  

闽ICP备14008679号