教程來自:【Python網絡爬蟲與信息提取】.MOOC. 北京理工大學
目標:爬取最好大學網前50名大學
代碼如下:
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:
print("產生異常")
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[3].string])
def printUnivList(ulist,num):
tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
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.com/zuihaodaxuepaiming2019.html'
html = getHTMLText(url)
fillUnivList(uinfo,html)
printUnivList(uinfo,50) #20所大學
if __name__ == '__main__':
main()
教程里用的代碼里沒有最后兩行,在pycharm里出不來結果,加上以后顯示正常。需要注意if __name__ == '__main__':
f
后面有空格,下划線也是連着的兩條。
輸出結果為:
排名 學校名稱 總分
1 清華大學 94.6
2 北京大學 76.5
3 浙江大學 72.9
4 上海交通大學 72.1
5 復旦大學 65.6
6 中國科學技術大學 60.9
7 華中科技大學 58.9
7 南京大學 58.9
9 中山大學 58.2
10 哈爾濱工業大學 56.7
11 北京航空航天大學 56.3
12 武漢大學 56.2
13 同濟大學 55.7
14 西安交通大學 55.0
15 四川大學 54.4
16 北京理工大學 54.0
17 東南大學 53.6
18 南開大學 52.8
19 天津大學 52.3
20 華南理工大學 52.0
21 中南大學 50.3
22 北京師范大學 49.7
23 山東大學 49.1
23 廈門大學 49.1
25 吉林大學 48.9
26 大連理工大學 48.6
27 電子科技大學 48.4
28 湖南大學 48.1
29 蘇州大學 47.3
30 西北工業大學 46.7
31 中國人民大學 46.1
32 華東師范大學 46.0
33 南京航空航天大學 44.8
34 對外經濟貿易大學 44.7
35 南方科技大學 44.6
36 華東理工大學 44.5
37 重慶大學 44.4
38 南京理工大學 44.3
39 北京科技大學 43.9
40 東北大學 43.7
41 上海大學 43.4
42 北京郵電大學 42.9
42 上海財經大學 42.9
42 中國農業大學 42.9
45 武漢理工大學 42.8
46 北京交通大學 42.6
46 華中師范大學 42.6
48 西安電子科技大學 42.1
49 中央財經大學 41.8
50 北京化工大學 41.7