python爬取大学排名

来自北理嵩老师的案例,之前嵩老师的网址我没办法访问,新的网址爬虫不成功,所以改了一下。
import requests
from bs4 import BeautifulSoup
import bs4

#通过URL信息从网页爬取数据
def getHTMLText(url):
try:
r = requests.get(url,timeout = 30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return ""

#提取页面中的关键数据,并且添加至列表
def fillUnivList(ulist,html):
new_html = (html.replace('<!---->', '')).replace('\n', '')
soup = BeautifulSoup(new_html,'html.parser')
#遍历tbody标签的所有子类型
for tr in soup.find('tbody').children:
#检测tr标签的类型,如果tr类型不是bs4库类型,则过滤掉
if isinstance(tr,bs4.element.Tag):
tds = tr('td')
astr = tds[1].find('a')
#print(tds[0].string)
#把需要的td内容加到list中
ulist.append([tds[0].string,astr.string,tds[4].string])

#格式化输出
def printUnivList(ulist,num):
tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
#输出表头
print(tplt.format("排名","学校名称","总分",chr(12288)))
for i in range(num):
u = ulist[i]
print(tplt.format(u[0].strip(),u[1].strip(),u[2].strip(),chr(12288)))
def main():
uinfo = []
#url = 'http://m.gaosan.com/gaokao/265440.html'
url = 'https://www.shanghairanking.cn/rankings/bcur/2020'
html = getHTMLText(url)
fillUnivList(uinfo,html)
printUnivList(uinfo,20) #20 unive

main()


posted @ 2021-03-10 20:38  silvan_happy  阅读(384)  评论(0编辑  收藏  举报