我正在参加中秋创意投稿大赛,详情请看:中秋创意投稿大赛
序言
前几天参加了一下掘金中秋投稿预热活动,本以为自己只是一个炮灰,于是就草草写了一首诗,没想到一发入魂直接干到了第三名,喜提字节月饼一盒!
看到掘金的开奖贴,我突然灵感一来,能不能写一个用于生成藏头诗的一个小Demo,一开始我想的是用Java写的,作为Java最后的倔强,但是发现好像不太像,Java爬虫太慢了,于是就想到了用Python来写。
生成藏头诗
我们需要写藏头诗,那么我们就肯定要获取到某字开头的诗歌,我想到的是利用百度汉语接口去进行获取。比方说我们需要搜索你开头的诗歌,那么我们需要这样请求百度汉语:hanyu.baidu.com/hanyu/s?wd=… ,ws
后面接关键字即可。
于是我们就开始写代码啦。
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
测试
源码
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码)和徽章!抽三位!