数据库 大学排名

 

1. 数据库笔记

SQLite 中的数据类型
数据库是存储数据的,它自然会对数据的类型进行划分,SQLite 划分有五种数据类型(不区分大小写)

NULL 类型,取值为 NULL,表示没有或者为空
INTERGER类型,取值为带符号的整数,即可为负整数
REAL类型,取值为浮点数
TEXT 类型,取值是字符串
BLOB类型,是一个二进制的数据块,即字节串,可用于存放纯二进制数据,例如图片

DDL语句
简单说,其实主要就是用来创建表的,当然也可以删除表,或者修改表的定义,比如原表只有三列,现在需要五列,就要修改表的定义

概念理解
表: 可以理解为我们通常所说的二维表,分为横纵(行列),用于存放数据
字段: 就是表中的列名
主键: 就是一种特殊的列。每一行数据的主键不能相同,是这一行数据的唯一标识,就像人的身份证号
创建表
create table 表名称(列名1 类型 配置, 列名2 类型 配置, 列名3 类型 配置);
1
注意,SQL语言是不区分大小写的,create 也可以写成CREATE。另外,每一句SQL语句后面都需要一个;号结尾

示例:

create table contacts (
id integer primary key autoincrement,
name text not null ,
phone text not null default 'unknow');

 

上面的DDL语句创建了一个叫contacts的表,并且定义了三个列,分别是id、name和phone,并且给每一个列定义了数据类型,分别是integer、text、text,这表明,id只能是一个整数,name和phone只能是字符串。
除了这些,还对每一个列做了一些配置,或者叫约束。

primary key autoincrement 的意思是指将id这个列定义为主键,并且从1开始自动增长,也就是说id这个列不需要人为的手动去插入数据,它会自动增长。

not null 指明这一列不能为空,当你插入数据时,如果不插入name或者phone的值,那么就会报错,无法完成这一次插入。

default 'unknow' default关键字代表设置默认值,这里指定它默认值是字符串'unkonw',当不插入这一列数据时,默认就是这个值。此处写法是有些多余的,它与not null 一起用是没有意义的,因为not null已经指明这一列必须插入,不可能为null,那就不需要默认值了,当然,此处只是为了演示default的用法

 

操作步骤

导入模块
连接数据库,返回连接对象
调用连接对象的execute()方法,执行SQL语句,进行增删改的操作,如进行了增添或者修改数据的操作,需调用commit()方法提交修改才能生效;execute()方法也可用于执行DDL语句进行创建表的操作
调用连接对象的cursor()方法返回游标对象,然后调用游标对象的execute()方法执行查询语句,查询数据库
关闭连接对象和游标对象

 1 # 导入模块
 2 import sqlite3
 3 
 4 # 连接数据库,返回连接对象
 5 conn = sqlite3.connect("D:/my_test.db")
 6 
 7 # 调用连接对象的execute()方法,执行SQL语句
 8 # (此处执行的是DDL语句,创建一个叫students_info的表)
 9 conn.execute("""create table if not exists students_info (
10 id integer primary key autoincrement,
11 name text,
12 age integer,
13 address text)""")
14 
15 # 插入一条数据
16 conn.execute("insert into students_info (name,age,address) values ('Tom',18,'北京东路')")
17 
18 # 增添或者修改数据只会必须要提交才能生效
19 conn.commit()
20 
21 # 调用连接对象的cursor()方法返回游标对象
22 cursor = conn.cursor()
23 
24 # 调用游标对象的execute()方法执行查询语句
25 cursor.execute("select * from students_info")
26 
27 # 执行了查询语句后,查询的结果会保存到游标对象中,调用游标对象的方法可获取查询结果
28 # 此处调用fetchall方法返回一个列表,列表中存放的是元组,
29 # 每一个元组就是数据表中的一行数据
30 result = cursor.fetchall()
31 
32 #遍历所有结果,并打印
33 for row in result:
34     print(row)
35 
36 #关闭
37 cursor.close()
38 conn.close()

 

 

 

 

 

 

 

2. 利用爬虫爬取最好大学网上对于2018年全国各大高校的各项指标的排名及综合状况:

复制代码

import requests, csv
from bs4 import BeautifulSoup

res_univer = requests.get('http://www.zuihaodaxue.com/zuihaodaxuepaiming2017.html')
res_univer.encoding = 'utf-8'
bs_univer = BeautifulSoup(res_univer.text, 'html.parser')

 

list_all_univer = bs_univer.find_all('tr')[1:501]
count = 0
list_data = []

 

with open('university.csv', 'w', encoding='gbk') as file_1:
    writer = csv.writer(file_1)
    writer.writerow(['排名','学校名称','省市','总分','生源质量','培养结果','科研规模','科研质量','顶尖成果','顶尖人才','科技服务','成果转化','学生国际化'])
    for list_a_univer in list_all_univer:
        count += 1
        list_data.append(count)
        data = list_a_univer.find_all('td')
        for x in range(1,13):
            list_data.append(data[x].text)
        writer.writerow(list_data)
        list_data = []

复制代码

这是爬取了其中对前600名高等院校的“培训规模”的情况,最终我们将数据导入一个文本文件中(.txt):

 

 

查询“广东技术师范学院”的排名和得分信息,我们有下面的代码:

复制代码
import requests
from bs4 import BeautifulSoup
allUniv=[]
def getHTMLText(url):
    try:
        r=requests.get(url,timeout=30)
        r.raise_for_status()
        r.encoding = 'utf-8'
        return r.text
    except:
        return ""
def fillUnivList(soup):
    data = soup.find_all('tr')
    for tr in data:
        ltd = tr.find_all('td')
        if len(ltd)==0:
            continue
        singleUniv = []
        for td in ltd:
            singleUniv.append(td.string)
        allUniv.append(singleUniv)
def printUnivList(num):
    a="广东技术师范学院"
    print("{1:^4}{2:{0}^8}{3:{0}^6}{4:{0}^6}{5:{0}^8}".format((chr(12288)),"排名","学校名称","省市","总分","培训规模"))
    for i in range(num):
        u=allUniv[i]
        if a in u:
            print("{1:^4}{2:{0}^10}{3:{0}^5}{4:{0}^8.1f}{5:{0}^10}".format((chr(12288)),u[0],u[1],u[2],eval(u[3]),u[6]))
def main(num):
    url='http://www.zuihaodaxue.cn/zuihaodaxuepaiming2018.html'
    html = getHTMLText(url)
    soup = BeautifulSoup(html,"html.parser")
    fillUnivList(soup)
    printUnivList(num)
main(600)
复制代码

于是我们在海量的信息中就能够找到我们学校的排名得分啦~

进一步地,我们调查一下广东省的高校的排名和得分情况,顺便对其中一项指标进行比较,只要将上述的代码中a这个参数的变量改为“广东”,即寻找所有关于广东省内的院校就能得到,同时改变爬虫爬取的内容:

复制代码
def printUnivList(num):
    a="广东技术师范学院"
    print("{1:^4}{2:{0}^8}{3:{0}^6}{4:{0}^6}{5:{0}^8}".format((chr(12288)),"排名","学校名称","省市","总分","培训规模"))
    for i in range(num):
        u=allUniv[i]
        if a in u:
            print("{1:^4}{2:{0}^10}{3:{0}^5}{4:{0}^8.1f}{5:{0}^10}".format((chr(12288)),u[0],u[1],u[2],eval(u[3]),u[6]))
复制代码

于是有下述结果:

posted on 2020-05-24 10:21  Hrunjie  阅读(566)  评论(0编辑  收藏  举报

导航