中國大學排名爬蟲
阿新 • • 發佈:2018-06-03
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()
- 爬蟲結果:
中國大學排名爬蟲