爬蟲:中國大學排名定向爬蟲例項
阿新 • • 發佈:2018-11-25
例項
最好大學排名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()