爬取中国近年大学排名


#
以软科中国最好大学排名为分析对象,基于requests库和bs4库编写爬虫程序,对2015年至2019年间的中国大学排名数据进行爬取: # (1)按照排名先后顺序输出不同年份的前10位大学信息,并要求对输出结果的排版进行优化; # (2)结合matplotlib库,对2015-2019年间前10位大学的排名信息进行可视化展示。 # (3附加)编写一个查询程序,根据从键盘输入的大学名称和年份,输出该大学相应的排名信息。如果所爬取的数据中不包含该大学或该年份信息,则输出相应的提示信息,并让用户选择重新输入还是结束查询 # -*- coding:utf-8 -*- import requests import bs4 from bs4 import BeautifulSoup import matplotlib.pyplot as plt import pandas as pd import csv # 获取静态网页 def getText(url): """获取网页HTML""" header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36'} # 设置头文件信息 try: r = requests.get(url, headers=header, timeout=10) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except requests.HTTPError: # 超时提示 print("time out") # 获取静态网页上的静态数据 def getUniversList(html): """获取HTML中的数据信息""" list_u = [] soup = BeautifulSoup(html, "html.parser") for tr in soup.find('tbody').children: if isinstance(tr, bs4.element.Tag): tds = tr('td') list_u.append([tds[0].string, tds[1].string, tds[2].string, tds[3].string]) return list_u # 打印排名数据 def printUniverseList(list_universe, num): """打印测试""" print("{:^10} {:^6} {:^10} {:^10}".format("排名", "学校名称","省市", "总分")) for i in range(num): u = list_universe[i] if u[0]: print("{:^10} {:^6} {:^10} {:^10}".format(u[0], u[1], u[2], u[3])) else: print("{:^10} {:^6} {:^10} {:^10}".format(i+1, u[1], u[2], u[3])) def putIntoCsv(list_universe, num): # 写入数据库 for i in range(num): u = list_universe[i] # print(u) :['1 ', '清华大学', '北京', '94.1'] # 1. 打开csv文件,a+的命令保证可以追加写入,utf-8-sig的命令保证写入不会是乱码 f = open('date.csv', 'a+', encoding='utf-8-sig') # 2. 基于文件对象构建 csv写入对象,dialect='unix'保证不会有空行 csv_writer = csv.writer(f, dialect='unix') # 3. 构建列表头,第一次写入即可注释掉 # csv_writer.writerow(["排名","学校名称","省份","总分"]) # 4. 写入csv文件内容 csv_writer.writerow(u) # 5. 关闭文件 f.close() pass # 定义爬取主方法 def spiderHtml(url): list_universe = [] # 爬取网页内容 # print(url) text = getText(url) # print(text) # 获取排名数据 list_universe = getUniversList(text) # print(list_universe) # 打印排名,只需执行一次,截图后为了节省时间便注释掉了 # printUniverseList(list_universe,10) # 写入csv文件存储,只需写入一次 # putIntoCsv(list_universe,10) if __name__ == '__main__': urls = [ "http://www.zuihaodaxue.cn/zuihaodaxuepaiming2015_0.html", "http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html", "http://www.zuihaodaxue.cn/zuihaodaxuepaiming2017.html", "http://www.zuihaodaxue.cn/zuihaodaxuepaiming2018.html", "http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html"] year = 2015 for url in urls: print("%d年:" % (year)) spiderHtml(url) print("**********************************************************************") year = year + 1 if year > 2019: break print("爬取成功")
以软科中国最好大学排名为分析对象,基于requests库和bs4库编写爬虫程序,对2015年至2019年间的中国大学排名数据进行爬取:
(1)按照排名先后顺序输出不同年份的前10位大学信息,并要求对输出结果的排版进行优化;
(2)结合matplotlib库,对2015-2019年间前10位大学的排名信息进行可视化展示。
(3附加)编写一个查询程序,根据从键盘输入的大学名称和年份,输出该大学相应的排名信息。如果所爬取的数据中不包含该大学或该年份信息,则输出相应的提示信息,并让用户选择重新输入还是结束查询


自己可以试试。
原文地址:https://www.cnblogs.com/msdog/p/13022345.html