中国大学定向排名爬取

在这里插入图片描述

# 功能描述
# 输入:大学排名url链接
# 输出:大学排名信息的屏幕输出(排名,大学名称,总分)
# 打开http://www.zuihaodaxue.cn/robots.txt 发现不存在 可以爬

# 程序的结构设计
# 步骤1:从网络上获取大学排名网页内容→getHTMLText()
# 步骤2:提取网页内容中信息到合适的数据结构→fillUnivList()
# 步骤3:利用数据结构展示并输出结果→printUnivList()

# 中文对齐问题的解决 采用中文字符的空格填充chr(12288)

import requests
import bs4
from bs4 import BeautifulSoup
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):
    soup=BeautifulSoup(html,"html.parser")
    for tr in soup.find('tbody').children:
        if isinstance(tr,bs4.element.Tag):  # 如果tr标签不是bs4.element.Tag类型 则过滤
            tds=tr('td') # 这里省略了findALL,实际上应该是tds=tr.findAll('td') 在tr中查找td
            ulist.append([tds[0].string,tds[1].string,tds[3].string])

def printUnivList(ulist,num):
    tblt="{0:^10}\t{1:{3}^10}\t{2:^10}"    # {3}表示 打印学校名称时 需要填充时 使用format函数中第四个变量填充 也就是chr(12288)中文空格
    print(tblt.format("排名","学校名称","总分",chr(12288))) # ^表示居中 <>分别表示左右对齐 6表示槽长度 \t表示横向制表符
    for i in range(num):
        u=ulist[i]
        print(tblt.format(u[0],u[1],u[2],chr(12288)))
    print("Successful!"+str(num))

def main():
    uinfo=[]
    url="http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html"
    html=getHTMLText(url)
    fillUnivList(uinfo,html)
    printUnivList(uinfo,20)

main()

结果:
排名    学校名称    总分
1    清华大学    95.9
2    北京大学    82.6
3    浙江大学    80
4   上海交通大学   78.7
5    复旦大学    70.9
6    南京大学    66.1
7  中国科学技术大学  65.5
8  哈尔滨工业大学   63.5
9   华中科技大学   62.9
10    中山大学    62.1
11    东南大学    61.4
12    天津大学    60.8
13    同济大学    59.8
14  北京航空航天大学  59.6
15    四川大学    59.4
16    武汉大学    59.1
17   西安交通大学   58.9
18    南开大学    58.3
19   大连理工大学   56.9
20    山东大学    56.3
Successful!20

发布了15 篇原创文章 · 获赞 5 · 访问量 7656

猜你喜欢

转载自blog.csdn.net/qq_39926861/article/details/104791438