爬虫 爬取大学排名"/>
python爬虫 爬取大学排名
思路说明:以下的几种排名数据全部来自“迁木网”,爬取每一种排名时所用的代码大致相同,只有部分因网页数据格式的不同而引起的变动。以下将爬取四种排名的代码分别列出,并展示结果。由于第二题中需要用到第一题中所得到的数据,而将四种排名爬到的数据全部放在一份程序中,既会显得冗长混乱,又会由于爬取每种排名时所用的源代码细节的不同而出现问题。故在第一问爬取数据后,我将每一份排名数据转换为python的pandas库中的DataFrame形式并输出csv文件到桌面,在完成第二题时,直接读入数据,再进行分析即可。
一、编写实现最新世界大学四大排名的爬虫,并输出世界前100排名,中国前二十排名
- qs世界大学排名(调用相关的函数就可以输出对应的前多少的排名啦)
from pandas import DataFrame,Series
import pandas as pd
import requests
from bs4 import BeautifulSoup
import bs4allUniv = {'排名':[],'学校名称':[],'国家':[]}
url = '.htm'
#url = ''def getHTMLText(url):try:r = requests.get(url, timeout=30)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:return ""
#提取html的函数
def fillUnivList(soup):data00 = soup.find_all('div',class_ = "rankItem")data0 = data00[1].find_all('tbody')data = data0[0].find_all('tr')for tr in data[1:]:ltd = tr.find_all('td')if len(ltd) == 0:continueallUniv['排名'].append(ltd[0].string)allUniv['学校名称'].append(ltd[1].string)allUniv['国家'].append(ltd[3].string)
#将需要的信息放在一个字典的几个相应的列表中的函数,便于生成DataFramedef printUnivList(num,scope = "World"):if scope == "World":printWorldUnivlist(num)elif scope == "China":printChinaUnivlist(num)
#通过传入数字和排名种类打印出相应排名,默认打印世界排名
def printWorldUnivlist(num):print("{1:^2} {2:{0}<30}".format(chr(12288),"排名","学校名称"))for i in range(0,num): try:print("{1:^4} {2:{0}<60}".format(chr(12288),df.ix[i]['排名'],df.ix[i]['学校名称']))except:continue
#打印世界排名前num的大学def printChinaUnivlist(num):print("{1:^2} {2:{0}<30}".format(chr(12288),"排名","学校名称"))df_china = df[df['国家'] == '中国']for i in range(0,num):print("{1:^4} {2:{0}<60}".format(chr(12288),df_china.index[i],df_china.iloc[i]['学校名称']))
#打印中国排名前num的大学html = getHTMLText(url)
soup = BeautifulSoup(html,'html.parser')
fillUnivList(soup)
df = DataFrame(allUniv)df.to_csv(r"C:/Users/ichigo/Desktop/qs.csv")
2.USNEWS世界大学排名
from pandas import DataFrame,Series
import pandas as pd
import requests
from bs4 import BeautifulSoup
import bs4allUniv = {'排名':[],'学校名称':[],'国家':[]}
url = ''def getHTMLText(url):try:r = requests.get(url, timeout=30)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:return ""
#提取html的函数def fillUnivList(soup):#data00 = soup.find_all('div',class_ = "rankItem")data0 = soup.find_all('tbody')data = data0[0].find_all('tr')for tr in data[1:]:ltd = tr.find_all('td')if len(ltd) == 0:continueallUniv['排名'].append(ltd[0].string)allUniv['学校名称'].append(ltd[1].string)allUniv['国家'].append(ltd[3].string)
#将需要的信息放在一个字典的几个相应的列表中的函数,便于生成DataFramedef printUnivList(num,scope = "World"):if scope == "World":printWorldUnivlist(num)elif scope == "China":printChinaUnivlist(num)
#通过传入数字和排名种类打印出相应排名,默认打印世界排名def printWorldUnivlist(num):print("{1:^2} {2:{0}<30}".format(chr(12288),"排名","学校名称"))for i in range(0,num): try:print("{1:^4} {2:{0}<60}".format(chr(12288),df.ix[i]['排名'],df.ix[i]['学校名称']))except:continue
#打印世界排名前num的大学def printChinaUnivlist(num):print("{1:^2} {2:{0}<30}".format(chr(12288),"排名","学校名称"))df_china = df[df['国家'] == '中国']for i in range(0,num):print("{1:^4} {2:{0}<60}".format(chr(12288),df_china.index[i],df_china.iloc[i]['学校名称']))
#打印中国排名前num的大学html = getHTMLText(url)
soup = BeautifulSoup(html,'html.parser')
fillUnivList(soup)
df = DataFrame(allUniv)
for indexs in df.index:try:df['国家'].ix[indexs] = (df['国家'].ix[indexs]).strip()except:continue
df.to_csv(r"C:\Users\ichigo\Desktop\usnews.csv")
- 3. 上海交通大学软科学世界大学排名
-
from pandas import DataFrame,Series import pandas as pd import requests from bs4 import BeautifulSoup import bs4allUniv = {'排名':[],'学校名称':[],'国家':[]} url = ''def getHTMLText(url):try:r = requests.get(url, timeout=30)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:return "" #提取html的函数def fillUnivList(soup):#data00 = soup.find_all('div',class_ = "rankItem")data0 = soup.find_all('tbody')data = data0[0].find_all('tr')for tr in data[1:]:ltd = tr.find_all('td')if len(ltd) == 0:continueallUniv['排名'].append(ltd[0].string)allUniv['学校名称'].append(ltd[1].string)allUniv['国家'].append(ltd[3].string)#将需要的信息放在一个字典的几个相应的列表中的函数,便于生成DataFrame def printUnivList(num,scope = "World"):if scope == "World":printWorldUnivlist(num)elif scope == "China":printChinaUnivlist(num) #通过传入数字和排名种类打印出相应排名,默认打印世界排名def printWorldUnivlist(num):print("{1:^2} {2:{0}<30}".format(chr(12288),"排名","学校名称"))for i in range(0,num): try:print("{1:^4} {2:{0}<60}".format(chr(12288),df.ix[i]['排名'],df.ix[i]['学校名称']))except:continue #打印世界排名前num的大学def printChinaUnivlist(num):print("{1:^2} {2:{0}<30}".format(chr(12288),"排名","学校名称"))df_china = df[df['国家'] == '中国']for i in range(0,num):print("{1:^4} {2:{0}<60}".format(chr(12288),df_china.index[i],df_china.iloc[i]['学校名称'])) #打印中国排名前num的大学html = getHTMLText(url) soup = BeautifulSoup(html,'html.parser') fillUnivList(soup) df = DataFrame(allUniv)for indexs in df.index:try:df['国家'].ix[indexs] = (df['国家'].ix[indexs]).strip()except:continue #将某些“国家”对应字符串两边有空格的去掉空格df.to_csv(r"C:\Users\ichigo\Desktop\arwu.csv")
4.THE世界大学排名
from pandas import DataFrame,Series
import pandas as pd
import requests
from bs4 import BeautifulSoup
import bs4allUniv = {'排名':[],'学校名称':[],'国家':[]}
url = '.htm'def getHTMLText(url):try:r = requests.get(url, timeout=30)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:return ""
#提取html的函数def fillUnivList(soup):#data00 = soup.find_all('div',class_ = "rankItem")data0 = soup.find_all('tbody')data = data0[0].find_all('tr')for tr in data[1:]:ltd = tr.find_all('td')if len(ltd) == 0:continueallUniv['排名'].append(ltd[0].string)allUniv['学校名称'].append(ltd[1].string)allUniv['国家'].append(ltd[6].string)
#将需要的信息放在一个字典的几个相应的列表中的函数,便于生成DataFrame def printUnivList(num,scope = "World"):if scope == "World":printWorldUnivlist(num)elif scope == "China":printChinaUnivlist(num)
#通过传入数字和排名种类打印出相应排名,默认打印世界排名def printWorldUnivlist(num):print("{1:^2} {2:{0}<30}".format(chr(12288),"排名","学校名称"))for i in range(0,num): try:print("{1:^4} {2:{0}<60}".format(chr(12288),df.ix[i]['排名'],df.ix[i]['学校名称']))except:continue
#打印世界排名前num的大学def printChinaUnivlist(num):print("{1:^2} {2:{0}<30}".format(chr(12288),"排名","学校名称"))df_china = df[df['国家'] == '中国']for i in range(0,num):print("{1:^4} {2:{0}<60}".format(chr(12288),df_china.index[i],df_china.iloc[i]['学校名称']))
#打印中国排名前num的大学html = getHTMLText(url)
soup = BeautifulSoup(html,'html.parser')
fillUnivList(soup)
df = DataFrame(allUniv)
for indexs in df.index:try:df['国家'].ix[indexs] = (df['国家'].ix[indexs]).strip()except:continue
#将某些“国家”对应字符串两边有空格的去掉空格
df.to_csv(r"C:\Users\ichigo\Desktop\THE.csv")
更多推荐
python爬虫 爬取大学排名
发布评论