💖因为有了Python藏头诗生成器,掘金的字节月饼礼盒包邮带回家(文末内附抽奖)💖

2,152 阅读3分钟

我正在参加中秋创意投稿大赛,详情请看:中秋创意投稿大赛

序言

    前几天参加了一下掘金中秋投稿预热活动,本以为自己只是一个炮灰,于是就草草写了一首诗,没想到一发入魂直接干到了第三名,喜提字节月饼一盒!

                    9b4253231da6457a98f168a1768242b9_tplv-k3u1fbpfcp-watermark.png

    看到掘金的开奖贴,我突然灵感一来,能不能写一个用于生成藏头诗的一个小Demo,一开始我想的是用Java写的,作为Java最后的倔强,但是发现好像不太像,Java爬虫太慢了,于是就想到了用Python来写。

生成藏头诗

    我们需要写藏头诗,那么我们就肯定要获取到某字开头的诗歌,我想到的是利用百度汉语接口去进行获取。比方说我们需要搜索你开头的诗歌,那么我们需要这样请求百度汉语:hanyu.baidu.com/hanyu/s?wd=…ws后面接关键字即可。

image.png

image.png 于是我们就开始写代码啦。

    def __init__(self):
        print("=" * 20 + "XiaoLin藏头诗生成器" + "=" * 20)
        self.url = 'https://hanyu.baidu.com/hanyu/ajax/search_list?'
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36 Edg/81.0.416.68'
        }

拼接关键字返回

    既然我们已经找到了生成藏头诗的方法,那么接下来的步骤是不是就简单很多了,我们只需要输入想要藏头的诗歌,然后进行分割可以获取到一个个的关键字,那么直接将关键字拼接到url上进行请求,将返回的结果逐行展示就可以,岂不是美滋滋?

def get_ct(self):
            # 输入需要藏头的语句
            self.wd = input('')
            for head in self.wd:
                try:
                    params = {'wd':head+'开头的诗句',
                          'from':'poem',
                          'pn':1,}
                    res = requests.get(url=self.url,headers=self.headers,params=params)
                    # 七言
                    list7 = []
                    # 五言
                    list5 = []
                    ret_array = res.json()['ret_array']
                    for ret in ret_array:
                        poem = ret['display_name'][0]
                        # 判断诗句长度
                        if len(poem) == 7:
                            list7.append(poem)
                        elif len(poem) == 5:
                            list5.append(poem)
                    print(choice(list5))
                except:
                    print("没有找到符合要求的诗句")

主程序

    最后为了交互体验良好,写一个主程序就大功告成!!

# 主程序
HideHeadPoem().get_ct()
while True:
    a = input('\n输入a继续(回车退出):')
    if a == 'a':
        for i in range(4):
            HideHeadPoem().get_ct()
    else:
        break

测试

image.png

源码

import requests
from random import choice

class HideHeadPoem:
    '''藏头诗类'''
    def __init__(self):
        print("=" * 20 + "XiaoLin藏头诗生成器" + "=" * 20)
        self.url = 'https://hanyu.baidu.com/hanyu/ajax/search_list?'
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36 Edg/81.0.416.68'
        }
    def get_ct(self):
            # 输入需要藏头的语句
            self.wd = input('')
            for head in self.wd:
                try:
                    params = {'wd':head+'开头的诗句',
                          'from':'poem',
                          'pn':1,}
                    res = requests.get(url=self.url,headers=self.headers,params=params)
                    # 七言
                    list7 = []
                    # 五言
                    list5 = []
                    ret_array = res.json()['ret_array']
                    for ret in ret_array:
                        poem = ret['display_name'][0]
                        # 判断诗句长度
                        if len(poem) == 7:
                            list7.append(poem)
                        elif len(poem) == 5:
                            list5.append(poem)
                    print(choice(list5))
                except:
                    print("没有找到符合要求的诗句")
# 主程序
HideHeadPoem().get_ct()
while True:
    a = input('\n输入a继续(回车退出):')
    if a == 'a':
        for i in range(4):
            HideHeadPoem().get_ct()
    else:
        break

福利

    上一次抽奖可谓是反响很剧烈啊,周榜榜1,月榜榜8,也是感谢各位掘友们的支持了!为了回馈掘友我觉得继续抽奖,从评论区里面进行抽奖!这次的奖品有掘金的T恤(S码)和徽章!抽三位!