您的位置:首页 > 编程语言 > Python开发

【python爬虫】《中华诗词大会》诗词接龙代码实现

2020-02-02 12:44 771 查看
# 爬取网站:中华古诗文网
# 诗词接龙
#Author:Eshine
#E-mail:732656715@qq.com
import requests
from my_fake_useragent import UserAgent
from lxml import etree
import random
import re
from pypinyin import lazy_pinyin

class FlyFlowerToken:
def __init__(self):
self.url = 'https://so.gushiwen.org/shiwen/default_4A111111111111A{}.aspx'
self.headers = {"User-Agent": UserAgent().random()}
self.poetry_list = []
# 起始令
self.token = '月'

def get_html(self, url):
'''
获取页面
:param url: 需要获取的页面的url
:return: 页面的html源码字符串
'''
return requests.get(url=url,
headers=self.headers).content.decode('utf-8')

def parse_html(self, html_str):
'''
解析页面
:param html_str: 需要被解析字符串
:return: 被解析后的诗句的列表
'''
html = etree.HTML(html_str)
poetry = html.xpath('//div[@class="contson"]//text()')
for p in poetry:
k = p.strip()
m = re.split(r'[。,?,!,;]', k)
for i in m:
if ',' in i:
self.poetry_list.append(i)
random.shuffle(self.poetry_list)

def check_poetry(self):
'''
按诗词接龙检查诗词别表的诗句
:return:TRUE
'''
for poetry in self.poetry_list:
if lazy_pinyin(self.token) == lazy_pinyin(poetry[0]):
print(poetry)
self.token = poetry[-1]
print(self.token)
return True
else:
return False

def main(self):
for i in range(1, 1000):
url = self.url.format(i)
# 获取页面
html = self.get_html(url)
# 解析页面
self.parse_html(html)
# 循环检查诗句词的诗句
while True:
if self.check_poetry():
continue
else:
break

if __name__ == "__main__":
flt = FlyFlowerToken()
flt.main()
  • 点赞 1
  • 收藏
  • 分享
  • 文章举报
Eshine Wong 发布了2 篇原创文章 · 获赞 2 · 访问量 235 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: