定向爬取大學排名-Python

MOOC課程學習筆記
課程鏈接:https://www.bilibili.com/video/BV1ME411E7jE?p=1

包含的庫

作用
re 正則表達式
requests 進行網絡請求
BeautifulSoup 從HTML中提取數據
import requests
import bs4
from bs4 import BeautifulSoup

程序的結構設計

def main():
    # 存儲大學排名信息
    uinfo = []
    #目標地址
    url = "http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html"
    #從網絡上獲取大學排名內容
    html = getHTMLText(url)
    #將網頁信息存儲到合適的數據結構中
    fillUnivList(uinfo,html)
    #利用數據結構展示並輸出內容
    printUnivList(uinfo,20)

各函數的具體實現

從網絡上獲取大學排名內容

def getHTMLText(url):
    '''獲取url信息,輸出url內容'''
    try:
        r = requests.get(url)   
        r.raise_for_status()                    #如果狀態不是200,引發HTTPError異常
        r.encoding = r.apparent_encoding        #按內容編碼
        return r.text                           #返回Response內容
    except:
        return "產生異常"

將網頁信息存儲到合適的數據結構中

def fillUnivList(ulist,html):
    '''將文章頁面放在list列表中'''
    soup = BeautifulSoup(html,"html.parser")
    for tr in soup.find('tbody').children:      #遍歷tbody標籤的子節點(children迭代類型)
        if isinstance(tr,bs4.element.Tag):      #檢測tr標籤是否爲bs4定義的Tag類型
            tds = tr('td')                      #tds以list形式存儲td標籤
            ulist.append([tds[0].string,tds[1].string,tds[2].string])

利用數據結構展示並輸出內容

def printUnivList(ulist,num):
    '''打印ulist中num個信息'''
    content = "{0:^10}\t{1:{3}^10}\t{2:^10}"
    print(content.format("排名","學校名稱","總分",chr(12288)))
    for i in range(num):
        u = ulist[i]
        print(content.format(u[0],u[1],u[2],chr(12288)))

輸出結果

    排名           學校名稱           總分    
    1              清華大學           北京    
    2              北京大學           北京    
    3              浙江大學           浙江    
    4             上海交通大學          上海    
    5              復旦大學           上海    
    6            中國科學技術大學         安徽    
    7             華中科技大學          湖北    
    7              南京大學           江蘇    
    9              中山大學           廣東    
    10           哈爾濱工業大學         黑龍江    
    11           北京航空航天大學         北京    
    12             武漢大學           湖北    
    13             同濟大學           上海    
    14            西安交通大學          陝西    
    15             四川大學           四川    
    16            北京理工大學          北京    
    17             東南大學           江蘇    
    18             南開大學           天津    
    19             天津大學           天津
    20            華南理工大學          廣東
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章