Python爬蟲學習 6 —— 使用bs4庫爬取大學排名

前面學瞭如何使用beautifulsoup,現在來嘗試簡單的爬取:中國大學排名
在這裏插入圖片描述

一、準備

查看Robots協議:robots協議
功能描述

輸入:大學排名的url鏈接
輸出:大學排名信息(排名,大學名稱,總分)

實現思路

  1. 從網頁上獲取HTML內容
  2. 提取HTML內容中的有用信息到合適的數據結構
  3. 利用數據結構展示輸出結果

程序框架

  1. 從網絡上獲取大學排名網頁內容:getHTMLText()
  2. 提取網頁中信息到合適的數據結構:fillUnivList()
  3. 利用數據結構展示結果:printUnivList()


二、爬取過程

代碼框架

import requests, bs4
from bs4 import BeautifulSoup

def getHTMLText(url):
	return ""

def fillUnivList(ulist, html):
	pass

def printUnivList(ulist, num):
	pass

def main():
	uinfo = []
	url = "http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html"
	html = getHTMLText(url)
	fillUnivList(uinfo, html)
	printUnivList(uinfo, 10)

main()

獲取HTML的函數

def getHTMLText(url):
	try:
		r = requests.get(url, timeout=30)
		r.raise_for_status()
		r.encoding = r.apparent_encoding
		return r.text
	except:
		return ""

提取信息並保存

def fillUnivList(ulist, html):
	soup = BeautifulSoup(html, "html.parser")
	for tr in soup.find("tbody").children:
		# 若tr類型不是bs4定義的標籤,則過濾掉
		if isinstance(tr, bs4.element.Tag):
			tds = tr("td")
			ulist.append([tds[0].string, tds[1].string, tds[2].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)))

這裏使用了 format 函數設置輸出格式,這個菜菜還不懂



三、爬取結果

輸出結果如圖:

    排名    	 學校名稱   	    省份    
    1     	   清華大學   	    北京    
    2     	   北京大學   	    北京    
    3     	   浙江大學   	    浙江    
    4     	  上海交通大學  	    上海    
    5     	   復旦大學   	    上海    
    6     	 中國科學技術大學 	    安徽    
    7     	  華中科技大學  	    湖北    
    7     	   南京大學   	    江蘇    
    9     	   中山大學   	    廣東    
    10    	 哈爾濱工業大學  	   黑龍江    


第六篇python爬蟲學習筆記完結啦 cheers 🍻🍻
參考內容:https://www.bilibili.com/video/av9784617/?p=33

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章