python爬⾍制作古诗或者藏头诗
昨天晚上,见到室友发了⼀条⾮常⽂艺的诗句说说,我就想,我这⽂采是不⾏了,但是机器应该可以。我今天就做了个⾮常简单的诗歌编辑脚本。过于简陋,仅供参考。
⽂章⽬录
前⾔
中国古诗词,是中华⽂化的特⾊,也是⾼级语⾔的⼀种表达。今天我就壮着胆⼦表现⼀下。
提⽰:以下是本篇⽂章正⽂内容,下⾯案例可供参考
⼀、制作古诗或者藏头诗?
我先说⼀下我的思路:
1.从⽹络上爬取古诗词
2.对古诗词进⾏处理,只保留5⾔或7⾔的句⼦
3.通过随机组合成诗句
⼆、使⽤步骤
1.引⼊库
我们所⽤到的库是经常使⽤的:
import requests
from lxml import etree
import time
import random
2.爬取古诗词⽹
之所以爬取两个url是因为,处理后可⽤的诗词句太少了,所以多⽅⾯获取,这个诗词句⽂件内容越多越好(这样爬取会有⼲扰需⾃⼰⼿动处理):
"""
获取诗词⽹的数据
"""
for i in range(1,21):
# 获取url
url ="so.gushiwen/shiwen/default_0AA{}.aspx".format(i)
# 获取⽹页数据
html = (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("","a", encoding="utf-8") as f:
f.write(strs.strip()+"\n")
print("正在下载第{}页的古诗".format(i))python怎么读取txt
# 延时2秒
time.sleep(2)
for i in range(1,6):
# 获取url
url ="so.gushiwen/mingjus/default.aspx?page={}".format(i)
# 获取⽹页数据
html = (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("","a", encoding="utf-8") as f:
f.write(strs.strip()+"\n")
print("正在下载第{}页的古诗".format(i))
# 延时2秒
time.sleep(2)
print("下载完成")
3.读取⽂件并处理⽂件
知识涉及太少,也没有很好的处理⽅法,就只有最原始的硬解
with open("","r", encoding="utf-8") as f:
poems = f.read()
# 对⽂件处理暂时没有想到更好的⽅法
# 把所有的。?!转换为,号
poems = place("。",",")
poems = place("?",",")
poems = place("!",",")
# 以,号分割
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))
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⾔或7⾔
if 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⾔或7⾔
if j[-1]== i and len(j)== chang:
lie.append(j)
# 判断是否有符合要求的诗句
if len(lie)>0:
# 多个符合要求的随机选泽⼀个
print(lie[random.randint(0,len(lie)-1)])
else:
print("没有合适的句⼦匹配。")
5.完整代码
不多说啥了,咱的这技术过于丢⼈,也只能厚着脸⽪发出来了。见谅见谅。
import requests
from lxml import etree
import time
import random
def get_shici():
"""
获取诗词⽹的数据
"""
for i in range(1,21):
# 获取url
url ="so.gushiwen/shiwen/default_0AA{}.aspx".format(i)
# 获取⽹页数据
html = (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("","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 ="so.gushiwen/mingjus/default.aspx?page={}".format(i)
# 获取⽹页数据
html = (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("","a", encoding="utf-8") as f:
f.write(strs.strip()+"\n")
print("正在下载第{}页的古诗".format(i))
# 延时2秒
time.sleep(2)
print("下载完成")
# 读取⽂件
with open("","r", encoding="utf-8") as f:
poems = f.read()
# 对⽂件处理暂时没有想到更好的⽅法
# 把所有的。?!转换为,号
poems = place("。",",")
poems = place("?",",")
poems = place("!",",")
# 以,号分割
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)
# 循环添加