抓取內容: 從最好大學網上抓取中國前10的大學排名、大學名稱、總分,並數據格式左對齊。 http://www.zuihaodaxue.cn/zuihaodaxuepaiming2017.html 首先,看下網站的Robots協議,沒有找到相關協議,可以抓取。 http://www.zuihaodax ...
抓取內容:
從最好大學網上抓取中國前10的大學排名、大學名稱、總分,並數據格式左對齊。 http://www.zuihaodaxue.cn/zuihaodaxuepaiming2017.html
首先,看下網站的Robots協議,沒有找到相關協議,可以抓取。 http://www.zuihaodaxue.cn/robots.txt
接下來開始整理思路:
- 獲取網頁信息
- 填充列表數據
- 輸出列表數據,併進行格式化
- 輸出結果
完整代碼:
1 import requests 2 from bs4 import BeautifulSoup 3 import bs4 4 5 # 獲取網頁信息的通用框架 6 def getHtmlText(url): 7 try: 8 r = requests.get(url, timeout = 30) 9 r.raise_for_status() 10 r.encoding = r.apparent_encoding 11 return r.text 12 except: 13 return '爬取失敗' 14 15 # 填充列表 16 def fillUnivList(ulist, html): 17 soup = BeautifulSoup(html, 'lxml') 18 for tr in soup.find('tbody').children: 19 # 檢查網頁代碼可以發現數據都儲存在tboyd標簽中,這裡需要對tbody的兒子節點進行遍歷 20 if isinstance(tr, bs4.element.Tag): 21 # 檢測標簽類型,如果不是bs4庫支持的Tag類型,就過濾掉,這裡需要先導入bs4庫 22 tds = tr('td') 23 # 解析出tr標簽中的td標簽後,將其儲存在列表tds中 24 ulist.append([tds[0].string, tds[1].string, tds[3].string]) 25 # 我們需要的是排名、學校名稱和總分 26 27 # 格式化後,輸出列表數據 28 def printUnivList(ulist, num): 29 tplt = '{:<10}\t{:<10}\t{:<10}' 30 # 定義輸出模板為變數tplt,\t為橫向製表符,<為左對齊,10為每列的寬度 31 print(tplt.format('排名','學校名稱','總分')) 32 # format()方法做格式化輸出 33 for i in range(num): 34 u = ulist[i] 35 print(tplt.format(u[0],u[1],u[2])) 36 37 def main(): 38 uinfo = [] 39 url = 'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2017.html' 40 html = getHtmlText(url) 41 fillUnivList(uinfo, html) 42 printUnivList(uinfo, 10) 43 # 選取前10所學校信息 44 main()
運行結果:
操作環境:Mac,Python 3.6,PyCharm 2016.2
參考資料:中國大學MOOC課程《Python網路爬蟲與信息提取》
----- End -----
更多精彩內容關註我公眾號:杜王丹
作者:杜王丹,互聯網產品經理