2024/5/22
以软科中国最好大学排名为分析对象,基于requests库和bs4库编写爬虫程序,对2015年至2019年间的中国大学排名数据进行爬取:
(1)按照排名先后顺序输出不同年份的前10位大学信息,并要求对输出结果的排版进行优化;
(2)结合matplotlib库,对2015-2019年间前10位大学的排名信息进行可视化展示。
(1)按照排名先后顺序输出不同年份的前10位大学信息,并要求对输出结果的排版进行优化;
(2)结合matplotlib库,对2015-2019年间前10位大学的排名信息进行可视化展示。
import requests from bs4 import BeautifulSoup import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 爬取数据 def scrape_university_ranking(year): url = f'https://www.shanghairanking.cn/rankings/bcur/{year}.html' response = requests.get(url) if response.status_code == 200: # 确保请求成功 soup = BeautifulSoup(response.content, 'html.parser') universities = [] ranks = [] for row in soup.find_all('tr')[1:]: columns = row.find_all('td') rank = columns[0].get_text() university = columns[1].get_text().strip() universities.append(university) ranks.append(int(rank)) return universities, ranks else: print(f"无法获取{year}年的大学排名数据") return [], [] # 可视化展示 def plot_ranking(years, top_n=10): for year in years: universities, ranks = scrape_university_ranking(year) if universities: plt.figure() plt.barh(universities[:top_n][::-1], ranks[:top_n][::-1], color='skyblue') plt.xlabel('Ranking') plt.title(f'Top {top_n} Universities in China ({year})') plt.gca().invert_yaxis() plt.show() # 查询功能 # 查询功能 def query_ranking(): year = input("请输入年份(2015-2019):") university = input("请输入大学名称:") if year not in ['2015', '2016', '2017', '2018', '2019']: print("年份输入有误,请重新输入!") query_ranking() return universities, ranks = scrape_university_ranking(year) if universities: if university in universities: idx = universities.index(university) print(f"{university}在{year}年的排名是第{ranks[idx]}名") else: print(f"抱歉,{year}年的数据中不包含{university}的排名信息") else: print(f"抱歉,无法获取{year}年的大学排名数据") # 按照排名输出前10位大学信息 years = ['2015', '2016', '2017', '2018', '2019'] for year in years: universities, ranks = scrape_university_ranking(year) print(f"\n{year}年中国最好大学排名前10位:") for u, r in zip(universities[:10], ranks[:10]): print(f"{r}. {u}") # 可视化展示 plot_ranking(years) # 查询功能 query_ranking()
浙公网安备 33010602011771号