前面學瞭如何使用beautifulsoup,現在來嘗試簡單的爬取:中國大學排名
一、準備
查看Robots協議:robots協議
功能描述
輸入:大學排名的url鏈接
輸出:大學排名信息(排名,大學名稱,總分)
實現思路
- 從網頁上獲取HTML內容
- 提取HTML內容中的有用信息到合適的數據結構
- 利用數據結構展示輸出結果
程序框架
- 從網絡上獲取大學排名網頁內容:getHTMLText()
- 提取網頁中信息到合適的數據結構:fillUnivList()
- 利用數據結構展示結果: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