[Python3爬蟲從入門到精通]中國大…
#採用request-bs4路線實現了中國大學排名定向爬蟲
# 對中英文混排輸出問題進行優化
import requests
from bs4 import BeautifulSoup
import bs4
#import bs4 爲了使用它的標籤類型定義
def getHTMLText(url) :
try:
r = requests.get(url, timeout = 30)
# print(r.status_code)200爲正常,其他信息都有誤
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return 'Get Failed.'
def fillUnivList(ulist, html):
soup =BeautifulSoup(html, 'html.parser')
#print(soup[0:500]) 報錯:TypeError: unhashable type:'slice'
for tr insoup.find('tbody').children:
if isinstance(tr, bs4.element.Tag) :
# isinstance(object,classinfo) isinstance函數來判斷一個對象是否爲某個類型的實例
#tr有可能不是標籤類型,此處判斷起過濾的作用
tds =tr('td')
# 將所有的td標籤放入列表tds中
# print(tds[0]) 輸出:
# print(tds)
ulist.append([tds[0].string, tds[1].string, tds[3].string])
def printUnivList(ulist, num):
#tplt = '{:^10}\t{1:{3}^10}\t{:^10}' 報錯:ValueError: cannot switchfrom automatic field numbering to manual fieldspecification
tplt ='{0:^10}\t{1:{3}^10}\t{2:^10}'
#其中0 表示第一個填充位置,1 第二個,以此類推
#:號後面帶填充的字符,只能是一個字符,不指定的話默認是用半角空格填充
#print('{ :^10}\t{ :^6}\t{ :^10}'.format('排名', '學校名稱', '總分'))//報錯:KeyError: ' '
#print({:^10}\t{:^6}\t{:^10}.format('排名', '學校名稱','總分'))
print(tplt.format('排名','學校名稱', '總分', chr(12288)))
#chr(12288) 應該是全角空格
#一個漢字也只算一個字符
for i inrange(num):
u = ulist[i]
print(tplt.format(u[0], u[1], u[2],chr(12288)))
def main():
uinfo = []
url ='http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html'
html =getHTMLText(url)
fillUnivList(uinfo,html)
printUnivList(uinfo, 20) # 20 univ
main()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.