20192111 实验四《Python综合实践》实验报告

20192111 2019-2020-2 《Python程序设计》实验四报告

课程:《Python程序设计》
班级: 1921
姓名: 蒋龙腾
学号:20192111
实验教师:王志强
实验日期:2020年5月28日
必修/选修: 公选课

1.实验内容

1.解析某网站的hxml,得到了一些关于《明日方舟》游戏内容的资料

2.将资料总结整理并且修改

3.仿照游戏内的抽卡内容,制作了一个抽卡的游戏小软件

2. 实验过程及结果

  from bs4 import BeautifulSoup
  import os
  from tkinter import *
  import tkinter.messagebox
  from time import sleep
  import random
  import webbrowser
  # dir_path = os.path.dirname(os.path.abspath(__file__))
  # os.chdir(dir_path)
  file = open('Kokodayo ArknightsData kkdy 一个平平无奇的明日方舟数据库 1.0 Wiki 维基 数据.html','rb')
  html = file.read()
  soup = BeautifulSoup(html,"html.parser")
  sp = soup.find_all(class_ ='profile-container')
  str1 = str(sp[0])
  # print(str1)
  listurl = []
  listname = []
  sp2 = soup.find_all(class_ ='profile-item-inner-wrapper')
  for y in sp2:
      str2 = str(y)
      pattern2 = re.compile(r'href="(.*?)"')
      result2 = pattern2.findall(str2)
      listurl.append(result2[0])
      # print(result2[0])
  # print(listurl)
  sp3 = soup.find_all(class_ ='image-inner')
  for x in sp3:
      str3 = str(x)
      pattern3 = re.compile(r'alt="(.*?)"')
      result3 = pattern3.findall(str3)
      listname.append(result3[0])
      # print(result3[0])
  # print(listname)
  lista = listname.copy()
  for z1 in range(0,2):
      listname.append(listname[2])
      listname.append(listname[5])
      listname.append(listname[6])
      listname.append(listname[10])
      listname.append(listname[11])
      listname.append(listname[15])
      listname.append(listname[18])
      listname.append(listname[19])
      listname.append(listname[21])
      listname.append(listname[23])
      listname.append(listname[24])
      listname.append(listname[26])
      listname.append(listname[27])
      listname.append(listname[29])
      listname.append(listname[32])
      listname.append(listname[33])
      listname.append(listname[37])
      listname.append(listname[40])
      listname.append(listname[41])
      listname.append(listname[44])
      listname.append(listname[49])
      listname.append(listname[65])
      listname.append(listname[66])
      listname.append(listname[67])
      listname.append(listname[68])
      listname.append(listname[69])
      listname.append(listname[70])
      listname.append(listname[71])
      listname.append(listname[72])
      listname.append(listname[73])
      listname.append(listname[74])
      listname.append(listname[75])
      listname.append(listname[76])
      listname.append(listname[77])
      listname.append(listname[78])
      listname.append(listname[79])
      listname.append(listname[80])
      listname.append(listname[81])
      listname.append(listname[82])
      listname.append(listname[83])
      listname.append(listname[84])
      listname.append(listname[85])
      listname.append(listname[86])
      listname.append(listname[87])
      listname.append(listname[89])
      listname.append(listname[90])
      listname.append(listname[91])
      listname.append(listname[92])
  for z2 in range(0,9):
      listname.append(listname[7])
      listname.append(listname[8])
      listname.append(listname[12])
      listname.append(listname[13])
      listname.append(listname[22])
      listname.append(listname[28])
      listname.append(listname[30])
      listname.append(listname[34])
      listname.append(listname[35])
      listname.append(listname[38])
      listname.append(listname[42])
      listname.append(listname[45])
      listname.append(listname[51])
      listname.append(listname[93])
      listname.append(listname[94])
      listname.append(listname[95])
      listname.append(listname[96])
      listname.append(listname[97])
      listname.append(listname[98])
      listname.append(listname[99])
      listname.append(listname[100])
      listname.append(listname[101])
      listname.append(listname[102])
      listname.append(listname[103])
      listname.append(listname[104])
      listname.append(listname[105])
      listname.append(listname[106])
      listname.append(listname[107])
      listname.append(listname[108])
      listname.append(listname[109])
      listname.append(listname[110])
      listname.append(listname[111])
      listname.append(listname[112])
      listname.append(listname[113])
      listname.append(listname[114])
      listname.append(listname[115])
      listname.append(listname[116])
  for z3 in range(0,14):
      listname.append(listname[46])
      listname.append(listname[47])
      listname.append(listname[52])
      listname.append(listname[53])
      listname.append(listname[117])
      listname.append(listname[118])
      listname.append(listname[119])
      listname.append(listname[120])
      listname.append(listname[121])
      listname.append(listname[122])
      listname.append(listname[123])
      listname.append(listname[124])
      listname.append(listname[125])
      listname.append(listname[126])
      listname.append(listname[127])
      listname.append(listname[128])
      listname.append(listname[129])
  for z4 in range(0,19):
      listname.append(listname[130])
      listname.append(listname[131])
      listname.append(listname[132])
      listname.append(listname[133])
      listname.append(listname[134])
  window = Tk()
  window.title('明日方舟模拟抽卡器')
  window.geometry('997x766')
  window.iconphoto(True, PhotoImage(file='kroos.png'))
  var = StringVar()
  photo = PhotoImage(file="BG.png")
  l = Label(window, textvariable=var, image=photo,compound = CENTER, fg='black', font=('楷体', 36, 'bold'),justify=LEFT)
  l.place(x=498.5, y=383, anchor='center')
  on_hit = False
  
  def hit_me():
      global on_hit
      if on_hit == False:
          var.set("正在抽卡。。。")
          sleep(1)
          p = random.randint(0, len(listname)-1)
          q = listname.index(listname[p])
          if q in [2,5,6,10,11,15,18,19,21,23,24,26,27,29,32,33,37,40,41,44,49,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92]:
              a = "恭喜!五星!你有一副欧洲人的面孔"
          elif q in [7,8,12,13,22,28,30,34,35,38,42,45,51,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116]:
              a = "可惜!四星!下一抽一定会出货"
          elif q in [46,47,52,53,117,118,119,120,121,122,123,124,125,126,127,128,129]:
              a = "惨!三星!你的肤色一定很健康"
          elif q in [130,131,132,133,134]:
              a = "二星。。。没救了,抬走吧"
          else:
              a = "WTF?!!!欧皇分我点欧气好吗,秋梨膏!"
  
          tkinter.messagebox.showinfo(title='foo↑foo↑', message=a)
          text = Text(window, width=50, height=1)
          text.place(x=498.5, y=200, anchor='center')
          text.insert(INSERT, listurl[q])
          c = len(listurl[q])
          text.tag_add('link', '1.0', str(1+c/100))
          text.tag_config('link', foreground='black', underline=True)
          def show_arrow_cursor(event):
              text.config(cursor='arrow')
          def show_xterm_cursor(event):
              text.config(cursor='xterm')
          def click(event):
              webbrowser.open(listurl[q])
          text.tag_bind('link', '<Enter>', show_arrow_cursor)
          text.tag_bind('link', '<Leave>', show_xterm_cursor)
          text.tag_bind('link', '<Button-1>', click)
          var.set(listname[p])
  b = Button(window, text='抽卡', font=('楷体', 24), width=10, height=1, command=hit_me)
  b.place(x=498.5, y=600, anchor='center')
  window.mainloop()
  file.close()

结果展示:



码云链接:

应用下载:

提取码:6u1j

3. 实验过程中遇到的问题和解决过程

  • 问题1:标签太杂太乱,需要的数据很难找到
  • 问题1解决方案:打开原网页的界面用F12的开发者调试工具来找到对应数据的标签和属性
  • 问题2:需要提取的数据内容在标签的属性中
  • 问题2解决方案:利用正则表达式筛选整个字符串当中的herf属性,并将其中的数据保存到一个列表里方便调用
  • 问题3:列表当中的数据都是平权的,我需要一个加权的功能,但是扩张列表之后要定位到原来的数据很困难
  • 问题3:解决方案:利用copy函数在加权之前新建一个列表,并用index函数找到扩张列表中第一个被筛选出的数据的位置(即在原列表中的位置)
  • 问题4:py文件需要转化成可执行文件使用
  • 问题4:解决方案:安装pyinstaller,在命令行执行相应命令进行打包
  • 问题5:更改窗口图标时,用iconbitmap函数无法准确定位ico图片所在路径
  • 问题5:解决方案:改用iconphoto函数,默认是py文件所在的相对路径

其他(感悟、思考等)

感悟:

学习一门编程语言是很难的,在这短暂的一学期中深深体会到了这一点,特别是对于我们大一新生来说,连C语言都刚刚开始起步的我们更是难上加难。可是越是如此,越能狠下心来钻研,不懂的地方一定要弄懂,为此反复百度,查阅各种资料。等到当下的问题解决了之后,回过头才发现自己的水平更上一层楼,不仅仅是对问题的解答,更是对整个逻辑思维的更深入理解,对于我们计算机系的同学来说,这份理解是最最难得可贵的。感谢王老师一学期来的陪伴,收获颇丰,感激之情,溢于言表。课结了,但是python语言学习远远不止如此,没有人能在一学期内掌握一门语言,所以未来我也会更加努力,更深入的探究python的奥秘。

参考资料

posted @ 2020-05-28 22:47  腹黑之米  阅读(739)  评论(0编辑  收藏  举报