#通過以下我總結
#如果程式沒有輸出
#建議你先檢查是否連線上了
#也就是鏈結是否存在,狀態是否為200
#在我複製mooc上程式的時候第一次不能執行並且報錯no attribute
#原因就在於你壓根就沒連上去
import requests
from bs4 import beautifulsoup
import bs4
defgethtmltext
(url)
:try
: r = requests.get(url)
#產生異常資訊
r.raise_for_status(
)#修改編碼
return r.text
except
:return
""#提取關鍵資料,並新增到列表中
#你通過觀察大學排名頁面
#發現大學名字放在tbody標籤下的tr下的td標籤中
#所以你要逐一遞迴式查詢
deffillunivlist
(ulist, html)
: soup = beautifulsoup(html,
"html.parser"
)#將tbody下的tr標籤做個遍歷
for tr in soup.find(
'tbody'
).children:
#每乙個標籤的兒子標籤有可能是字串
#因為大學都封裝在標籤裡
#所以我們要過濾掉非標籤
#如果tr型別不是bs4庫定義的tag型別將過濾掉
ifisinstance
(tr, bs4.element.tag)
:#將所有td標籤存到陣列裡
tds = tr(
'td'
)[tds[0]
.string, tds[1]
.string, tds[2]
.string]
)#列印出來
defprintunivlist
(ulist, num)
:#表示format的第乙個引數給它
#format的乙個引數給它,其佔8位的保留小數點2位的浮點數,
print
("\t\t"
.format
("排名"
,"學校名稱"
,"總分"))
for i in
range
(num)
: u=ulist[i]
print
("\t\t"
.format
(u[0
],u[1]
,u[2])
)def
main()
: uinfo =
url =
''html = gethtmltext(url)
print
("aa"
) fillunivlist(uinfo, html)
printunivlist(uinfo,
100)
# 20 univs
main(
)#最後的輸出格式不太好
#你可也將以下**替換printunivlist函式中所有
'''最後輸出結果會很整潔
^10} 1表示位置,表示用第3個引數來填充,^表示居中,10表示佔10個位置
這裡的第三個引數就是char(12288)
之前是採用西文字元填充,現在採用中文字元填充
tplt = "\t^10}\t"
print(tplt.format("排名","學校名稱","總分",chr(12288)))
for i in range(num):
u=ulist[i]
print(tplt.format(u[0],u[1],u[2],chr(12288)))
'''
定向爬蟲例項之中國大學排名定向爬蟲
定向爬蟲指的是只針對所給的url的頁面爬取,不擴充套件爬取的爬蟲。給的例子的網頁採用靜態頁面的方式,是非常好的學習例子。本次例項的要求 url import requests from bs4 import beautifulsoup import os import re import bs4程式...
Python爬蟲 中國大學排名爬蟲
案例 import requests from bs4 import beautifulsoup import bs4 def gethtmltext url 爬取最好大學排名 內容 try r requests.get url,timeout 30 r.raise for status retur...
Python之爬蟲 中國大學排名
usr bin env python coding utf 8 import bs4 import requests from bs4 import beautifulsoup 通過傳入 資訊建立乙個獲取網頁文字的函式 def gethtmltext url 判斷獲取網頁文字過程中是否有錯誤 try...