关于python爬虫课程设计

python爬虫课程设计
背单词吧

题目简介

大学四年中,必不可少的证就是英语四六级证书,我们的项目可以通过pycharm来对我们所掌握的词汇量进行一个小测试,能够将掌握得不是很好的单词,保存到一个文档里面,以便我们能够及时的复习,并对掌握得还不错的单词进一步巩固,争取早日拿到英语四六级证书。

目标定义

目标:在扇贝单词的基础上新增错词本和可视化正确率。
主要解决的问题:单词是否正确的检验,需要检查推测出每个单词的编号变量是什么;最后发现是rank唯一确定。

.流程图

4.实现/5.分析

第一步:get请求爬取到相应的词库

import requests
url = 'https://www.shanbay.com/api/v1/vocabtest/category/?'
word_type_json = requests.get(url).json()    #json()解析下载内容
word_type = word_type_json['data'] #获取词库种类(解析为字典,data对应的值为各种词汇)
n = 0 #用于计数
for type in word_type:
    print(str(n) + '. ' + type[1])
    n += 1
choose_type = int(input('请输入出题范围的编号:'))
ciku = word_type[choose_type][0]     #选择得到对应的词库
#利用字符串+运算后是将两个字符串连接构造词库的URL
test = requests.get('https://www.shanbay.com/api/v1/vocabtest/vocabularies/?category=' + ciku)
words = test.json()['data'] #获取所有单词信息
#用于存单词的list
danci = [] #认识的单词
words_knows = [] #认识的单词
not_knows = [] #不认识的单词
num = int(input('\n输入你想测试的单词数'))
print ('\n测试开始。如果你认识这个单词,请输入1后按Enter,否则直接按Enter:')

第四行的word_type_json[‘data’]因为词库种类在返回的字典的data键对应的值里面然后分别为各种词库标号并显示出来,给用户选择,效果如图:

在扇贝官网中:


第二步:仿照扇贝单词,用户选择认识的单词

#用户选择认识 or 不认识
n=1   #用于计数
for x in words:
    print('第' + str(n) + '个:' + x['content']) #获取单个单词
    answer = input('认识请输入1,否则直接敲Enter:')
    if answer == '1':
        danci.append(x['content']) #把选择的单词加入,只加入单词
        words_knows.append(x) #这里是把整个单词的信息加入,即整个字典加入,因为后面要用到
    else:
        not_knows.append(x) #不认识的放这里
    if n == num:
        break
    n += 1


可以看到这里扇贝官网上一次生成的单词太多了,
先爬取下来,用户输入num来表示想测试几个单词,代码用n=1来计数,每测完一个就++

if n == num:
    break
n += 1

第三步:检测单词
先观察官网,找到对应的正确翻译

这样就可以做出单词检测了
代码第48行

print(str(i+1) + y['definition_choices'][i]['definition'])

显示选择号码,还有中文
代码第50行

if y['definition_choices'][choice-1]['rank'] == y['rank']: #选择正确
通过每个单词特有的rank对应的值来判断用户是否选择正确

第四步:生成错词本和陌生单词本
这里是陌生单词本,错词本差不多

for x in not_knows:
    n += 1
    right_ans = x['rank']
    for i in range(4):
        if x['definition_choices'][i]['rank'] == right_ans:
            mean = x['definition_choices'][i]['definition']
            break
    word = x['content'] + ' ' + mean
    print(str(n) + '.' + word)
    f.write(word + '\n')
f.close()

第五步:查看错词本
因为open创建的文件在当前目录下,所以这里把当前路径打印一下

import os
print("您的错题本的生成路径:")
print(os.getcwd())

全部代码

import requests, sys
print('')
url = '[图片]https://www.shanbay.com/api/v1/vocabtest/category/?'
word_type_json = requests.get(url).json()    #json()解析下载内容
word_type = word_type_json['data'] #获取词库种类(解析为字典,data对应的值为各种词汇)
n = 0 #用于计数
for type in word_type:
    print(str(n) + '. ' + type[1])
    n += 1
choose_type = int(input('请输入出题范围的编号:'))
ciku = word_type[choose_type][0]     #选择得到对应的词库
#利用字符串+运算后是将两个字符串连接构造词库的URL
test = requests.get('[图片]https://www.shanbay.com/api/v1/vocabtest/vocabularies/?category=' + ciku)
words = test.json()['data'] #获取所有单词信息
#用于存单词的list
danci = [] #认识的单词
words_knows = [] #认识的单词
not_knows = [] #不认识的单词
num = int(input('\n输入你想测试的单词数'))
print ('\n测试开始。如果你认识这个单词,请输入1后按Enter,否则直接按Enter:')
#用户选择认识 or 不认识
n=1 #用于计数
for x in words:
    print('第' + str(n) + '个:' + x['content']) #获取单个单词
    answer = input('认识请输入1,否则直接敲Enter:')
    if answer == '1':
        danci.append(x['content']) #把选择的单词加入,只加入单词
        words_knows.append(x) #这里是把整个单词的信息加入,即整个字典加入,因为后面要用到
    else:
        not_knows.append(x) #不认识的放这里
    if n == num:
        break
    n += 1


#单词检测
if len(danci) != 0:
    print('\n在上述' + str(num) +'个单词中,有' + str(len(danci)) + '个是你觉得自己认识的,它们是:')
    for word in danci:
        print(word, end=' ')
    #以选择题形式来检测
    print ('\n\n现在来检测一下,你有没有真正掌握它们:\n')
    wrong_words = [] #错词本(也是单词所有信息加入,因为保存本地会用到)
    right_num = 0 #记录选择正确的个数
    n = 1 #用于计数
    for y in words_knows:
        print('第' + str(n) + '个:')
        for i in range(4): #遍历四个选项
            print(str(i+1) + y['definition_choices'][i]['definition'])
        choice = int(input('请选择单词\" ' + y['content'] + ' \"的正确翻译:'))
        if y['definition_choices'][choice-1]['rank'] == y['rank']: #选择正确
            right_num += 1
        else:
            wrong_words.append(y) #否则整个单词的信息加入错词list
        n += 1
        print('\n')
    print ('你的成绩:')
    print ('共' + str(num) + ' 个词汇,你认识其中 ' + str(len(danci)) + ' 个,')
    print('实际掌握 ' + str(right_num) + ' 个,错误 ' + str(len(wrong_words)) + ' 个。')


    #错误单词本
    if len(wrong_words) != 0:
        save = input ('\n\n你是否想打印错词集并保存在本地?(输入 Y 或 N:)')
        if save == 'Y':
            f = open('错误单词本.txt', 'a+')
            print ('你记错的单词有:')
            n = 1
            mean = ''
            for z in wrong_words:
                right_ans = z['rank'] #正确词意号
                for i in range(4):
                    if z['definition_choices'][i]['rank'] == right_ans: #找到正确词意
                        mean = z['definition_choices'][i]['definition']
                        break
                word = z['content'] + ' ' + mean #把单词和正确词意连起来
                print (str(n) + '.' + word)
                f.write(word + '\n')
                n += 1
            f.close()
            print('\n不熟单词已保存至当前文件目录下')
    else:
        print('继续加油')
else:
    print('\n居然TMD一个也不认得?')


#陌生单词本
if len(not_knows) != 0:
    save = input ('\n是否打印不认识的单词并保存在本地?(输入Y或N:)')
    if save == 'Y':
        f = open('陌生单词本.txt', 'a+')
        print ('以下是你不认识的单词:')
        n=0
        mean = ''
        for x in not_knows:
            n += 1
            right_ans = x['rank']
            for i in range(4):
                if x['definition_choices'][i]['rank'] == right_ans:
                    mean = x['definition_choices'][i]['definition']
                    break
            word = x['content'] + ' ' + mean
            print(str(n) + '.' + word)
            f.write(word + '\n')
        f.close()
        print ('\n记住的词已保存至当前文件目录下,欢迎下次使用')
    else:
        print('\n欢迎下次使用')
else:    #全对的情况
    print('\n你真棒!')
#查看错题本路径
import os
print("您的错题本的生成路径:")
print(os.getcwd())
import warnings
warnings.filterwarnings('ignore')
#数据可视化
import matplotlib.pyplot as plt
z = [str(right_num), str(len(wrong_words))]
plt.rcParams['font.sans-serif'] = 'SimHei'    #为了中文正常显示
plt.title('正确率')
plt.pie(z, autopct='%.2f%%', labels=['正确', '错误'])
plt.show()
全部评论

相关推荐

11-27 17:08
已编辑
牛客_产品运营部_私域运营
腾讯 普通offer 24k~26k * 15,年包在36w~39w左右。
点赞 评论 收藏
分享
沉淀一会:1.同学你面试评价不错,概率很大,请耐心等待; 2.你的排名比较靠前,不要担心,耐心等待; 3.问题不大,正在审批,不要着急签其他公司,等等我们! 4.预计9月中下旬,安心过节; 5.下周会有结果,请耐心等待下; 6.可能国庆节前后,一有结果我马上通知你; 7.预计10月中旬,再坚持一下; 8.正在走流程,就这两天了; 9.同学,结果我也不知道,你如果查到了也告诉我一声; 10.同学你出线不明朗,建议签其他公司保底! 11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
寿命齿轮:实习就一段还拉了,项目一看就不是手搓,学历也拉了,技术栈看着倒是挺好,就是不知道面试表现能咋样。 不过现在才大三,争取搞两端大厂实习,或者一个纯个人项目+一段大厂,感觉秋招还是未来可期。
投递美团等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
2
分享
牛客网
牛客企业服务