1. 程式人生 > >爬蟲:中國大學排名定向爬蟲例項

爬蟲:中國大學排名定向爬蟲例項

例項

最好大學排名http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html

功能描述:輸入大學排名URL連結

輸出:大學排名資訊的螢幕輸出(排名,大學名稱,總分)

技術路線:requests-bs4

定向爬蟲:僅對輸入URL進行爬取,不擴充套件爬取

bs4只能獲取靜態url資訊

程式的結構設計

步驟1:從網路上獲取大學排名網頁內容

定義getHTMLText()

步驟2:提取網頁內容中資訊到合適的資料結構

定義fillUnivList()

步驟3:利用資料結構展示並輸出結果

定義printUnivList()

{}是槽,例如{0:^10}格式化輸出的第0個字元依次累加,輸出寬度為10個字元,向右對其(不加^預設左對齊),寬度小於字串的實際寬度,以實際寬度輸出;省略0即按槽對應順序

{0:^10}中的0是一個序號,表示格式化輸出的第0個字元,依次累加;

{0:^10}中的30表示輸出寬度約束為10個字元;

{0:^10}中的^表示輸出時右對齊,若寬度小於字串的實際寬度,以實際寬度輸出;

詳情見:https://zhidao.baidu.com/question/368788419926022804.html

# -*- coding: cp936 -*-
##{0}對應於"age",^右對齊輸出
##{1}對應於"name",左對齊輸出(預設)
print("{0:^30}\n{1:^30}\n{1:10}".format("age","name"))
輸出為:
    age
    name
name
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[2].string,tds[3].string,tds[4].string])            
def printUnivList(ulist,num):
    print("{0:^10}\t{1:{5}^10}\t{2:{5}^10}\t{3:^10}\t{4:^10}".format("排名","學校名稱","省份","總分","生源質量",chr(12288)))
    for i in range(num):
        u=ulist[i]
        print("{0:^10}\t{1:{5}^10}\t{2:{5}^10}\t{3:^10}\t{4:^10}".format(u[0],u[1],u[2],u[3],u[4],chr(12288)))
def main():
          uinfo=[]
          url="http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html"
          html=getHTMLText(url)
          fillUnivList(uinfo,html)
          printUnivList(uinfo,310)

main()