python爬蟲筆記(五)網絡爬蟲之提取——實例優化:中國大學排名爬蟲


1. 代碼

# -*- coding: utf-8 -*-
"""
Created on Thu Jan 30 01:27:38 2020
@author: douzi
"""
 
import requests
from bs4 import BeautifulSoup
import bs4
def getHTMLText(url):
    try:
        headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"}
        r = requests.get(url, timeout=30, headers=headers)
        r.raise_for_status()              # 產生異常信息
        r.encoding = r.apparent_encoding  # 修改編碼
        return r.text   # 返回網頁信息
    except:
        return ""
 
# 提取html信息中關鍵的數據,並提取到列表中
def fillUnivList(ulist, html):
    soup = BeautifulSoup(html, "html.parser")
    # 所有大學信息被封裝在表格中,這個表格標簽叫tbody
    # 在tbody中,每個大學信息又被封裝在tr中,每個tr標簽,包含所有當前大學的所有信息
    # 每個tr中信息,又被td所包圍
    # 1. 遍歷tbody,tr即每個大學的信息
    for tr in soup.find('tbody').children:
        # 過濾非標簽類型的其他數據
        if isinstance(tr, bs4.element.Tag):
            tds = tr('td')    # 查詢tr中的 td
            ulist.append([tds[0].string, tds[1].string, tds[3].string])
            
    
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]))    
    
    
def main():
    # 大學信息放到列表中
    uinfo = []       
    # 大學排名的url
    url = "http://www.zuihaodaxue.com/zuihaodaxuepaiming2016.html"
    # 將url轉換成html
    html = getHTMLText(url)   
    fillUnivList(uinfo, html)
    printUnivList(uinfo, 20)    # 20 univs
    
if __name__ == '__main__':
    main()
    

2. 實例優化

(1)問題1:中文對齊不好 (因為中英文混合輸出)

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], u[1], u[2], chr(12288)))    

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM