[Python3爬蟲從入門到精通]中國大…

#採用request-bs4路線實現了中國大學排名定向爬蟲
# 對中英文混排輸出問題進行優化
import requests
from bs4 import BeautifulSoup
import bs4
#import bs4 爲了使用它的標籤類型定義

def getHTMLText(url) :
    try:
       r = requests.get(url, timeout = 30)
      # print(r.status_code)200爲正常,其他信息都有誤
       r.raise_for_status()
       r.encoding = r.apparent_encoding
       return r.text
    except:
       return 'Get Failed.'

def fillUnivList(ulist, html):
    soup =BeautifulSoup(html, 'html.parser')
   #print(soup[0:500]) 報錯:TypeError: unhashable type:'slice'
    for tr insoup.find('tbody').children:
       if isinstance(tr, bs4.element.Tag) :
      # isinstance(object,classinfo) isinstance函數來判斷一個對象是否爲某個類型的實例
      #tr有可能不是標籤類型,此處判斷起過濾的作用
           tds =tr('td')
          # 將所有的td標籤放入列表tds中
          # print(tds[0]) 輸出:
          # print(tds) 
          ulist.append([tds[0].string, tds[1].string, tds[3].string])
          
def printUnivList(ulist, num):
   #tplt = '{:^10}\t{1:{3}^10}\t{:^10}' 報錯:ValueError: cannot switchfrom automatic field numbering to manual fieldspecification
    tplt ='{0:^10}\t{1:{3}^10}\t{2:^10}'
   #其中0 表示第一個填充位置,1 第二個,以此類推
    #:號後面帶填充的字符,只能是一個字符,不指定的話默認是用半角空格填充
    #print('{ :^10}\t{ :^6}\t{ :^10}'.format('排名', '學校名稱', '總分'))//報錯:KeyError: ' '
    #print({:^10}\t{:^6}\t{:^10}.format('排名', '學校名稱','總分'))
    print(tplt.format('排名','學校名稱', '總分', chr(12288)))
   #chr(12288) 應該是全角空格
    #一個漢字也只算一個字符
    for i inrange(num):
       u = ulist[i]
       print(tplt.format(u[0], u[1], u[2],chr(12288)))

def main():
    uinfo = []
    url ='http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html'
    html =getHTMLText(url)
    fillUnivList(uinfo,html)
    printUnivList(uinfo, 20) # 20 univ
main()
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章