from os import lstat
import requests
from bs4 import BeautifulSoup
import pandas as pd
import numpy as np
import json
from matplotlib import colors, pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签 plt.reParams是一个配置表
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
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):
print("{1:^4}{2:{0}<15}{3:{0}^5}{4:{0}^8}{5:{0}<10}".format(
chr(12288), "名次", "学校名称", "综合得分", "星级排名", "办学层次"))
lst =[]
for i in range(1,num+1):
u = allUniv[i]
lst.append(eval(u[2]))
print("{1:^4}{2:{0}<15}{3:{0}^5}{4:{0}^8}{5:{0}<10}".format(
chr(12288), u[0], u[1], u[2], u[3], u[4]))
df=pd.DataFrame(allUniv) #把数据放入csv文件
df.to_csv('D:\\demo\\xsb.csv',index=False,sep=',')
def barpng(): #对前十名的学校的综合得分进行画图
大学名称=range(10)
综合得分=[100,98.78,82.14,81.98,81.43,81.34,80.49,80.44,80.41,80.38]
plt.bar(大学名称,综合得分, label='分数',color = "green")
plt.legend()
plt.xticks([0,1,2,3,4,5,6,7,8,9],['北京大学','清华大学','复旦大学','浙江大学','南京大学','上海交通大学','华中科技大学','中国科学技术大学','中国人民大学','天津大学'])
plt.xlabel("大学名称")
plt.ylabel("综合得分")
plt.title(u'中国高校前10星级统计图')
for i in range(10):
plt.text(i,综合得分[i]+0.1,"%s"%综合得分[i],va='center')
plt.show()
def main():
url = 'http://gaosan.com/gaokao/265440.html'
html = getHTMLText(url) #获取网页内容
soup = BeautifulSoup(html, "html.parser") #对数据分析
fillUnivList(soup) #对获取的网页进行数据分析
printUnivList(100) #在终端打印排名
barpng() #画柱形图
main()
如果我要只获取排名前一百的大学存入csv文件中,该怎么做