爬蟲學習——"中國大學最好排名"(技術路線:requests庫和bs4)(來源於北理工Python網絡爬蟲與信息提取網絡公開課)

"中國大學排名"定向爬蟲示例
課程地址:http://open.163.com/movie/2019/5/G/6/MEEMCM1NP_MEEU3UFG6.html

#功能描述:
#輸入:大學排名URL鏈接
#輸出:大學排名信息的屏幕輸出(排名,大學名稱,總分)
#使用技術:requests庫和bs4
#定向爬蟲:僅對輸入URL進行爬取,不擴展爬取
#是否可以實現:查看網頁源代碼判斷是否是靜態頁面
#查看robots協議:網頁不存在(無robots協議)
'''
程序的結構設計:
    1、從網絡上獲取大學排名網頁內容——getHTMLText();
    2、提取網頁內容中信息到合適的數據結構——fillUnivList();
    3、利用數據結構展示並輸出結果——printUnivList()
'''

import requests
from bs4 import BeautifulSoup
import bs4

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):
            tds =tr('td')#查詢
            ulist.append([tds[0].string,tds[1].string,tds[3].string])

#num指打印多少個元素出來
def printUnivList(ulist,num):
    #格式化輸出
    '''
    中文字符寬度不夠,系統用英文進行填充,導致對齊出現問題
    print("{:^10}\t{:^6}\t{:^10}".format("排名","學校名稱","總分"))
    for i in range(num):
        u=ulist[i]
        print("{:^10}\t{:^6}\t{:^10}".format(u[0], u[1], u[2]))
    採用中文字符的空格填充chr(12288)
    '''
    #優化後的格式化輸出
    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], u[1], u[2],chr(12288)))


if __name__ == '__main__':
    uinfo=[]#大學信息列表
    url="http://www.zuihaodaxue.com/zuihaodaxuepaiming2016.html"
    html=getHTMLText(url)
    fillUnivList(uinfo,html)
    printUnivList(uinfo,20)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章