用python的GUI、requests、BeautifulSoup库和pyinstaller,做个高校排名查询窗口的应用(新老 手做项目)

用python的GUI、requests、BeautifulSoup库和pyinstaller,做个高校排名查询窗口

放假了,闲着也是闲着,青春短暂。看到2019级的孩子们,登上大学的舞台,并想到了2020级的孩子还在苦苦奋斗,于是突发奇想,做个查询窗口,以便于他们树立目标,获得自己想去高校的部分信息。也借此机会,学点没学过的python的知识,给自己入门的爬虫技巧做个总结。

用到的库

import requests#网页请求
from bs4 import BeautifulSoup#网页解析
import bs4
from tkinter import #窗口制作
import tkinter as tk

首先是获得想要查询的网页,我看的是中国大学慕课中的一个老师讲解视频,所以也延用了他举例子用到的网站
http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html
进入网站
在这里插入图片描述
查看网页源码

1、2、3表示网页的数据结构,(tbody(tr(td))),所以查找时,要查找tbody下的 tr,从中查找出 td 标签
接下来就是爬取并解析网页数据

def get_url(url):#获得网页内容
    try:
        r = requests.get(url , timeout = 30)#获得url的相关参数
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text#返还url的内容
    except:
        return "网页爬取异常" + r.status_code#返回状态码

def explain_url(url , list):#获得url的内容,并解析在一个二维列表当中
    soup = BeautifulSoup(url, "html.parser")#解释
    for tr in soup.find('tbody').children:#查看网页的源代码,发现每个tbody下面有tr个分支,每个tr分支下td是他的儿子,所以遍历
        if isinstance(tr, bs4.element.Tag):#判断tr下是否是bs4的类型
            tds = tr('td')#查询tr下所有的td标签
            list.append([tds[0].string, tds[1].string, tds[2].string, tds[3].string, tds[4].string])#将爬下的数据写到一个二维数据列表当中
    return list

这段代码参考了中国大学慕课《Python网络爬虫与信息提取 》嵩天老师的授课代码(其实还是懒)

下面就是做窗口的代码块了

做窗口浪费了很大一部分时间,因为没接触过这个模块,但最总解决了,上代码!!!!!

def store_content(list , name):#输出储存的内容
    static = ""
    for i in ulist:#由于数据结构这门课还没学,所以不知道我这个搜索方法高效不(还有一种内置函数的方法find)
        for j in i:
            if name in i:
                static += "{:^15}\t{:^15}\t{:^15}\t{:^15}\t{:^15}\n".format(i[0], i[1], i[2], i[3], i[4])#由于下面的组件text只能是文本,我只好这样,给他定义个字符串
                break
    return static  #

def window(list):#窗口设置
    root = Tk()#建立窗口
    root.title("2019年全国高校排名查询窗口")#取名

    group1 = Label(root, text="2019年全国高校排名(排名范围是教育部公布的全国普通高等学校名单中,"
                              "1243所办学层次为本科的大学。\n"
                              "这其中公办大学826所、民办大学153所、独立学院264所。)"
                              "\n\n输入你想查询的学校名称,或者省份")
    group1.pack(padx = 5 , pady = 0)#Label组件

    e = tk.Entry(root,show=None)#输入框组件,并设置大小
    e.pack(padx = 300 , pady =8)

    def insert_point():#定义一个事件
        var = e.get()
        temp = store_content(list , var)
        t.insert('insert',temp)

    b1 = tk.Button(root, text='查询', width=9,
               height=1, command=insert_point)#button触发事件,事件中包含的函数store_content就是用来储存并输出数据内容
    b1.pack()

    group2 = Label(root, text="-----------------------------查询结果如下"
                              "-----------------------------",font=(35), fg="green")
    group2.pack(padx=5, pady=10)
    group21 = Label(root, text="{:^10}\t{:^11}\t{:^11}\t{:^11}\t{:^10}".format("排名",
                                                                               "学校名称",
                                                                               "省份",
                                                                               "总分",
                                                                               "生源质量"),font=("黑体", 12))
    group21.pack(padx=5, pady=10)

    t = tk.Text(root, width=90, height=20, font = ("黑体",12))#文本组件,用来显示数据内容
    t.pack()

    group3 = Label(root)
    group3.pack(padx = 3 , pady = 0)

    mainloop(  )#设置主循环

这段代码耗费 3 天,做出来的那一刹那都快哭出来了
新手到老手,就得经历从未有过的磨难,何况是笨笨的自学

全代码

import requests
from bs4 import BeautifulSoup
import bs4
from tkinter import *
import tkinter as tk


def get_url(url):#获得网页内容
    try:
        r = requests.get(url , timeout = 30)#获得url的相关参数
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text#返还url的内容
    except:
        return "网页爬取异常" + r.status_code#返回状态码

def explain_url(url , list):#获得url的内容,并解析在一个二维列表当中
    soup = BeautifulSoup(url, "html.parser")#解释
    for tr in soup.find('tbody').children:#查看网页的源代码,发现每个tbody下面有tr个分支,每个tr分支下td是他的儿子,所以遍历
        if isinstance(tr, bs4.element.Tag):#判断tr下是否是bs4的类型
            tds = tr('td')#查询tr下所有的td标签
            list.append([tds[0].string, tds[1].string, tds[2].string, tds[3].string, tds[4].string])#将爬下的数据写到一个二维数据列表当中
    return list

def store_content(list , name):#输出储存的内容
    static = ""
    for i in ulist:
        for j in i:
            if name in i:
                static += "{:^15}\t{:^15}\t{:^15}\t{:^15}\t{:^15}\n".format(i[0], i[1], i[2], i[3], i[4])#给二维列表赋
                break
    return static  #

def window(list):
    root = Tk()
    root.title("2019年全国高校排名查询窗口")

    group1 = Label(root, text="2019年全国高校排名(排名范围是教育部公布的全国普通高等学校名单中,"
                              "1243所办学层次为本科的大学。\n"
                              "这其中公办大学826所、民办大学153所、独立学院264所。)"
                              "\n\n输入你想查询的学校名称,或者省份")
    group1.pack(padx = 5 , pady = 0)

    e = tk.Entry(root,show=None)
    e.pack(padx = 300 , pady =8)

    def insert_point():
        var = e.get()
        temp = store_content(list , var)
        t.insert('insert',temp)

    b1 = tk.Button(root, text='查询', width=9,
               height=1, command=insert_point)
    b1.pack()

    group2 = Label(root, text="-----------------------------查询结果如下"
                              "-----------------------------",font=(35), fg="green")
    group2.pack(padx=5, pady=10)
    group21 = Label(root, text="{:^10}\t{:^11}\t{:^11}\t{:^11}\t{:^10}".format("排名",
                                                                               "学校名称",
                                                                               "省份",
                                                                               "总分",
                                                                               "生源质量"),font=("黑体", 12))
    group21.pack(padx=5, pady=10)

    t = tk.Text(root, width=90, height=20, font = ("黑体",12))
    t.pack()

    group3 = Label(root)
    group3.pack(padx = 3 , pady = 0)

    mainloop(  )

if __name__ == '__main__':
    ulist = []
    url = "http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html"
    first = get_url(url)
    second = explain_url(first, ulist)
    third = window(ulist)
    pass

运行结果如下
在这里插入图片描述
在这里插入图片描述
最后又突然想到,高中生会编程的应该不多,我还是给他打包成 .exe 可运行应用,这样装机就可以使用啦

打开cmd ,输入下面命令

pyinstaller -F -w D:\PyCharm2017\pycharm_pyfile\.idea\pachong.py -i ‪C:\Users\Dell\Desktop\bitbug_favicon.ico

在这里插入图片描述
最后得到我想要的
在这里插入图片描述
OHHHHH!!

图标生成方法:
下载你要生成的图片,随便格式如jpg、png到桌面(好找),然后在这个网站上进行免费转化 .ico 图标
http://www.bitbug.net/
在这里插入图片描述
想要那个应用的小伙伴可以私信我!

总结:“你最终会成你想成为的那个人”,2019年最后一天发的我2020年要怎么怎么样,然后第二天就继续刷抖音,玩b站,人生,青春,不能这样吧。这4天苦熬,看了许多文章,看了好多视频课,最终结果还令人满意,加油!2020!

中国大学慕课《Python网络爬虫与信息提取 》嵩天

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章