1. 程式人生 > >中國大學排名爬蟲

中國大學排名爬蟲

com 網絡 text tab 千分位 main fin fill 功能

  • 功能描述:
    • 輸入:大學排名URL鏈接:http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html
    • 輸出:大學排名信息的屏幕輸出(排名,大學名稱,總分)
    • 技術路線:requests-bs4
    • 定向爬蟲:僅對輸入的URL鏈接進行爬取,不擴展爬取。
技術分享圖片技術分享圖片

  • 程序的程序設計:
    • 步驟1:從網絡上獲取大學排名網頁內容(getHTMLText())
    • 步驟2:提取網頁內容中信息到合適的數據結構(fillUnivList())
    • 步驟3:利用數據結構展示並輸出結果(printUnivList())
格式化輸出: 技術分享圖片技術分享圖片

  • 爬蟲代碼:
 1 import requests
 2 from bs4 import BeautifulSoup
 3 import bs4
 4  
 5 def getHTMLText(url):
 6     try:
 7         r = requests.get(url, timeout = 30)
 8         r.raise_for_status()
 9         r.encoding = r.apparent_encoding
10         return r.text
11     except
: 12 return "" 13 14 def fillUnivList(ulist, html): 15 soup = BeautifulSoup(html, "html.parser") 16 for tr in soup.find(tbody).children: 17 if isinstance(tr, bs4.element.Tag): 18 tds = tr(td) 19 ulist.append([tds[0].string, tds[1].string, tds[2].string])
20 21 def printUnivList(ulist, num): 22 print("{:^10}\t{:^6}\t{:^10}".format("排名", "學校名稱", "總分")) 23 for i in range(num): 24 u = ulist[i] 25 print("{:^10}\t{:^6}\t{:^10}".format(u[0], u[1], u[2])) 26 27 #主函數 28 def main(): 29 uinfo = [] 30 url = http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html 31 html = getHTMLText(url) 32 fillUnivList(uinfo, html) 33 printUnivList(uinfo, 20) # 20所大學 34 main()
  • 爬蟲結果:
技術分享圖片技術分享圖片

  • 爬蟲實例優化:
    • 中文對齊問題的原因:
      • : <填充> <對齊> <寬度> , <.精度> <類型>
        引導符號 用於填充的單個字符 <左對齊 >右對齊 ^居中對齊 槽的設定輸出寬度 數字的千分位分隔符適用於整數和浮點數 浮點數小數備部分的精度或字符串的最大輸出長度 整數類型:b,c,d,o,x,X浮點數類型:e,E,f,%
        當中文字符寬度不夠使,采用西文字符填充;中西文占用寬度不同。
    • 中文對齊問題的解決:
      • 采用中文字符的空格填充 chr(12288)
  • 爬蟲代碼:
 1 import requests
 2 from bs4 import BeautifulSoup
 3 import bs4
 4  
 5 def getHTMLText(url):
 6     try:
 7         r = requests.get(url, timeout = 30)
 8         r.raise_for_status()
 9         r.encoding = r.apparent_encoding
10         return r.text
11     except:
12         return ""
13  
14 def fillUnivList(ulist, html):
15     soup = BeautifulSoup(html, "html.parser")
16     for tr in soup.find(tbody).children:
17         if isinstance(tr, bs4.element.Tag):
18             tds = tr(td)
19             ulist.append([tds[0].string, tds[1].string, tds[2].string])
20  
21 def printUnivList(ulist, num):
22     tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
23     print(tplt.format("排名", "學校名稱", "總分", chr(12288)))
24     for i in range(num):
25         u = ulist[i]
26         print(tplt.format(u[0], u[1], u[2], chr(12288)))
27  
28 #主函數
29 def main():
30     uinfo = []
31     url = http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html
32     html = getHTMLText(url)
33     fillUnivList(uinfo, html)
34     printUnivList(uinfo, 20) # 20所大學
35 main()
  • 爬蟲結果:
技術分享圖片技術分享圖片

中國大學排名爬蟲