期末小作业1:
反思:
- 代码美观度差的太远
- 三天不写python就模糊了一些函数用法
- 目标定好,第一时间的思路是面向过程而不是面向对象
- 面向对象的写法掌握不熟练,需多加练习
import bs4
import requests
from bs4 import BeautifulSoup
class BestUniversity:
def __init__(self):
'''
初始化,传入url与headers
:param self:
:return:
'''
self.url = "http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html"
self.headers = {
"User - Agent": "Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 80.0.3987.132Safari / 537.36"
}
self.time = 30
self.uinfo = []
self.html = self.parse_url()
def parse_url(self):
'''
获取网站源码
:param self:
:return: decode()
'''
try:
response = requests.get(url=self.url, headers=self.headers, timeout=self.time)
html = response.content.decode()
return html
except:
return ""
def fillUnivList(self,html, ulist):
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[2].string])
def printUnivList(self,ulist, num):
fmat = "{0:^10}\t{1:^6}\t{2:^10}"
print(fmat.format("排名", "学校", "总分", chr(12888)))
with open("BestUniversity.txt", "w", encoding="utf-8") as f:
f.write(fmat.format("排名", "学校", "总分", chr(12888)))
for i in range(num):
u = ulist[i]
print(fmat.format(u[0], u[1], u[2], chr(12888)))
with open("BestUniversity.txt", "a", encoding="utf-8") as f:
f.write('\n')
f.write(fmat.format(u[0], u[1], u[2], chr(12888)))
def run(self):
self.fillUnivList(self.html, self.uinfo)
self.printUnivList(self.uinfo, 20)
if __name__ == '__main__':
BU = BestUniversity()
BU.run()