定向爬蟲:僅對輸入URL進行爬取,不擴充爬取
中國大學排名2018
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICMyYTMvw1dvwlMvwlM3VWaWV2Zh1Wa-cmbw5yM4oGe55mY4VmMvwVN3UTYyYjYkRjNzMjYtUGall3LcdXYy9CXt92YucWbpRWdvx2Yx5yazF2Lc9CX6MHc0RHaiojIsJye.png)
format格式化輸出
看下所需資訊位置
程式大體架構
import requests
from bs4 import BeautifulSoup
def getHTMLText(url):
return ""
def fillUnivList(ulist,html):
pass
def printUnivList(ulist,num):
print("Suc"+str(num))
def main():
uinfo = []
url = ""
html = getHTMLText(url)
fillUnivList(uinfo,html)
printUnivList(uinfo,10)
main()
複制
getHTMLText()
def GetHTMLText(url): #擷取網頁内容
try:
r = requests.get(url)
r.raise_for_status() #用于捕獲異常
r.encoding = r.apparent_encoding
return r.text
except:
return ""
複制
fillUnivList()
def fillUnivList(ulist, html): # 把網頁内容放到資料結構中
soup = BeautifulSoup(html,"html.parser")
'''一個tr标簽存放一所大學的資訊'''
for tr in soup.find("tbody").children:
if isinstance(tr,bs4.element.Tag): #僅僅周遊标簽,過濾掉非标簽類型的其它資訊
tds = tr('td') #将所有的td标簽存放到清單tds中,等價于tr.find_all('td')傳回一個清單類型
'''由于進行了周遊,使用print列印tds會得到多個清單'''
ulist.append([tds[0].string, tds[1].string, tds[3].string])#向ulist中增加所需要的資訊
複制
printUnivList()
def printUnivlist(ulist, num):
print("{:^10}\t{:^6}\t{:^10}".format("排名","學校","總分"))
for i in range(num):
u = ulist[i]
print("{:^10}\t{:^6}\t{:^10}".format(u[0],u[1],u[2]))
複制
main
import requests
import bs4 # 用到instance
from bs4 import BeautifulSoup
def GetHTMLText(url): #擷取網頁内容
try:
r = requests.get(url)
r.raise_for_status() #用于捕獲異常
r.encoding = r.apparent_encoding
return r.text
except:
return ""
def fillUnivList(ulist, html): # 把網頁内容放到資料結構中
soup = BeautifulSoup(html,"html.parser")
'''一個tr标簽存放一所大學的資訊'''
for tr in soup.find("tbody").children:
if isinstance(tr,bs4.element.Tag): #僅僅周遊标簽,過濾掉非标簽類型的其它資訊
tds = tr('td') #将所有的td标簽存放到清單tds中,等價于tr.find_all('td')傳回一個清單類型
'''由于進行了周遊,使用print列印tds會得到多個清單'''
ulist.append([tds[0].string, tds[1].string, tds[3].string])#向ulist中增加所需要的資訊
def printUnivlist(ulist, num):
print("{:^10}\t{:^6}\t{:^10}".format("排名","學校","總分"))
for i in range(num):
u = ulist[i]
print("{:^10}\t{:^6}\t{:^10}".format(u[0],u[1],u[2]))
def main():
uinfo = []
url = "http://www.zuihaodaxue.cn/zuihaodaxuepaiming2018.html"
html = GetHTMLText(url)
fillUnivList(uinfo,html)
printUnivlist(uinfo,10)
main()
複制
代碼優化,使用chr(12288)解決中文對齊問題
import requests
import bs4 # 用到instance
from bs4 import BeautifulSoup
def GetHTMLText(url): #擷取網頁内容
try:
r = requests.get(url)
r.raise_for_status() #用于捕獲異常
r.encoding = r.apparent_encoding
return r.text
except:
return ""
def fillUnivList(ulist, html): # 把網頁内容放到資料結構中
soup = BeautifulSoup(html,"html.parser")
'''一個tr标簽存放一所大學的資訊'''
for tr in soup.find("tbody").children:
if isinstance(tr,bs4.element.Tag): #僅僅周遊标簽,過濾掉非标簽類型的其它資訊
tds = tr('td') #将所有的td标簽存放到清單tds中,等價于tr.find_all('td')傳回一個清單類型
'''由于進行了周遊,使用print列印tds會得到多個清單'''
ulist.append([tds[0].string, tds[1].string, tds[3].string])#向ulist中增加所需要的資訊
'''def printUnivlist(ulist, num):
print("{:^10}\t{:^6}\t{:^10}".format("排名","學校","總分"))
for i in range(num):
u = ulist[i]
print("{:^10}\t{:^6}\t{:^10}".format(u[0],u[1],u[2]))
'''
'''優化輸出格式,中文對齊問題,使用chr(12288)表示一個中文空格,utf-8編碼'''
def printUnivlist(ulist, num):
tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}" #輸出模闆,{3}使用format函數第三個變量進行填充,即使用中文空格進行填充
print(tplt.format("排名","學校","總分",chr(12288)))
for i in range(num):
u = ulist[i]
print(tplt.format(u[0],u[1],u[2],chr(12288)))
def main():
uinfo = []
url = "http://www.zuihaodaxue.cn/zuihaodaxuepaiming2018.html"
html = GetHTMLText(url)
fillUnivList(uinfo,html)
printUnivlist(uinfo,10)
main()
複制