[python]從最好大學(xué)網(wǎng)獲取大學(xué)排名

按照北京理工嵩天老師課程代碼,一步步實(shí)現(xiàn)。

首先查看最好大學(xué)網(wǎng)是否存在robots:

在瀏覽器中修改網(wǎng)址為以下:
http://www.zuihaodaxue.com/robots.txt
查看結(jié)果:

404.png

可知不存在robots.txt文檔

從最好大學(xué)網(wǎng)獲取大學(xué)排名信息并存儲(chǔ)

最好大學(xué)網(wǎng)排名.png

查看目標(biāo)網(wǎng)頁(yè)源代碼,確認(rèn)待存儲(chǔ)項(xiàng)在網(wǎng)頁(yè)代碼中的結(jié)構(gòu):


網(wǎng)頁(yè)源代碼.png

一個(gè)學(xué)校信息是由一個(gè)<tr></tr>標(biāo)簽內(nèi)存儲(chǔ)的多個(gè)<td></td>標(biāo)簽信息。
代碼如下:

import requests
from bs4 import BeautifulSoup
import bs4

# 從網(wǎng)絡(luò)中獲取大學(xué)排名網(wǎng)頁(yè)內(nèi)容
def getHTMLText(url):
    try:
        r = requests.get(url)
        r.raise_for_status()
        r.encoding = r.status_code
        return r.text
    except:
        return ''


# 提取網(wǎng)頁(yè)內(nèi)容中信息到合適的數(shù)據(jù)結(jié)構(gòu)
def fillUnivList(ulist, html):
    soup = BeautifulSoup(html, 'html.parser')
    # 解析html代碼中tbody所在的位置
    for tr in soup.find('tbody').children:
        # 找到每所大學(xué)所在的tr標(biāo)簽
        if isinstance(tr, bs4.element.Tag):
            # 存儲(chǔ)所有的td標(biāo)簽
            tds = tr('td')
            ulist.append([tds[0].string, tds[1].string, tds[3].string])

# 利用數(shù)據(jù)結(jié)構(gòu)展示并輸出結(jié)果
def printUnivList(ulist, num):
    print("{:^10}\t{:^6}\t{:^10}\t".format("排名", "學(xué)校名稱", "總分"))
    for i in range (num):
        u = ulist[I]
        print("{:^10}\t{:^6}\t{:^10}\t".format(u[0],u[1],u[2]))

def main():
    uinfo = []
    url = 'http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html'
    html = getHTMLText(url)
    fillUnivList(uinfo, html)
    printUnivList(uinfo, 20)

main()

運(yùn)行結(jié)果如下:


運(yùn)行結(jié)果.png

輸出結(jié)果對(duì)齊問題

format函數(shù)中英文長(zhǎng)度不同導(dǎo)致中文對(duì)齊問題
(字符寬度不夠選擇英文字符來填充)
原代碼:

print("{:^10}\t{:^6}\t{:^10}\t".format("排名", "學(xué)校名稱", "總分"))

解決方法:
字符寬度不夠選擇參數(shù)中第四個(gè)參數(shù)(中文字符)來填充,
修改代碼:

def printUnivList(ulist, num):
    tplt = "{0:^10}\t{1:{3}^6}\t{2:^10}\t"
    print(tplt.format("排名", "學(xué)校名稱", "總分", chr(12288)))
    for i in range (num):
        u = ulist[i]
        print(tplt.format(u[0],u[1],u[2], chr(12288)))

修改后的結(jié)果:


修改結(jié)果.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容