成语接龙小程序
1.设计目标概述
设计一个小程序,能在桌面上打开,有简单的界面,查找到输入该成语可以接龙的成语(即查询与该成语最后一个字谐音的所有成语)
2.设计思路
1.首先创建本地成语库
2.编写成语查找程序,即在创建好的成语库中查找到目标成语
3.设计简单的界面
4.设计触发函数
5.将文件转换成.exe类型文件然后放在桌面上使用。
3.设计步骤
1.创建本地的成语库
使用爬虫,将目标成语网站上的成语爬取下来保存到本地的CSV文件中
1.目标网站
进入该网站会发现所有的成语可以按照首字母检索
点击A会发现页面的url是http://chengyu.t086.com/list/A_1.html
该页面是以A为首字母开头的第一页
不难发现,url的规律就是http://chengyu.t086.com/list/ +首字母 +_当前页数+.html
2.解析网页
打开任意页面,检查网页源代码
分析网页,不难发现,每页的每一个成语都是包含在<div class=“title”>下的<ul>下的<li>中
因此,可以直接使用xpath
提取目标信息
3.数据获取
使用requests 的get方法
该网页的编码方式是 gbk
格式 需要将格式转换一下即 response.content.decode("gbk")
response=requests.get(url)
text=response.content.decode("gbk")#网页的编码方式是“gbk”,经过该操作之后返回的是字符串
html = etree.HTML(text)
content= html.xpath("//div[@class='listw']/ul/li//text()")
4.数据保存
将获取的数据保存在本地的CSV文件中
with open("成语大全.csv","a",newline="") as f:
writer=csv.writer(f)
writer.writerow(content)
5.细节
在爬虫调度器中,使用了使用了try机制判断循环循环产生的url是否有效,如果有效,请求页面,提取信息,如果无效,则表示在该字母开头的页面已经访问完,跳出该字母页面的访问循环,进行下一个字母开头的页面循环
构造首字母列表是因为有些字母并没有对应的成语,于是人工构造一个列表,然后循环读取使用。
6.源代码展示
# -*- coding:utf-8 -*-
"""
item:爬取成语
author:Jonty
"""
import requests
from lxml import etree
import csv
import urllib.request
def get(url):
"""
获取详细页的成语,将其写入CSV文件
:return:
"""
response=requests.get(url)
text=response.content.decode("gbk")#网页的编码方式是“gbk”,经过该操作之后返回的是字符串
html = etree.HTML(text)
content= html.xpath("//div[@class='listw']/ul/li//text()")#返回的是列表
with open("成语大全.csv","a",newline