1. 程式人生 > >python爬蟲(三):BeautifulSoup 【6. 例項】

python爬蟲(三):BeautifulSoup 【6. 例項】

爬取最好大學網的大學排名

 

需要掌握的其它知識:

(1)列表

list1=[1,2,3],list1.append([3,4])

(2)format用法

.format 比 % 更好用,按位置替換,詳細瞭解可以參考網址

https://blog.csdn.net/u014770372/article/details/76021988

(3)輸出的格式

print("{}\t{:^20}\t{}".format("排名","學校名稱","總分"))

\t:製表符

^:居中,預設是左對齊

20:寬度,預設是10

(4)find_all('td').string

find_all()方法因為找到了多個td,所以是個列表,不能直接.string,要這樣

soup.find_all('td')[0].string

soup.find_all('td')[1].string

輸出結果:

 

 

 

# requests庫連線網站取出資料,bs4庫html解析

import requests

from bs4 import BeautifulSoup

import bs4

 

 

# 獲取網頁內容

def getHTMLText(url):

try:

r = requests.get(url, timeout = 30)

# 判斷網頁狀態,200為正常

r.raise_for_status()

# 修改編碼,apparent_coding是基於文字內容分析出的格式

r.encoding = r.apparent_encoding

return r.text

except:

# 異常則返回一個空字串

return ""

 

 

# 提取網頁內容(r.text)到合適的資料結構(列表)

def fillUnivList(ulist, html):

soup = BeautifulSoup(html, 'html.parser')

# 觀察發現大學資訊都在標籤tbody-tr-td中,遍歷子節點的標籤,找出td

for i in soup.find('tbody').children:

# isinstance是python判斷變數型別的函式,bs4.element.Tag是標籤,如soup.a

# Tag的常用操作有.name .attrs .string

if isinstance(i, bs4.element.Tag):

# 可簡寫為tds = i('td')

tds = i('td')

# 取出大學排名、名稱、評分,加到ulist列表中

ulist.append([tds[0].string, tds[1].string, tds[2].string])

 

 

# 輸出資訊,num是輸出資訊的條數

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():

# 大學資訊放到列表unifo中

uinfo = []

url = 'http://www.zuihaodaxue.com/zuihaodaxuepaiming2018.html'

html = getHTMLText(url)

fillUnivList(uinfo, html)

printUnivList(uinfo, 20)

main()