使用了requests库和bs4库
import requests
from bs4 import BeautifulSoup
import bs4
def getHtmlText(url): #返回response类型的文本属性
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: #这个选tbody是因为刚好这个标签把全部的排名信息罩起来了,.children是遍历的一种方式(只获得下一层),返回的是迭代类型,只能用在循环中
if isinstance(tr, bs4.element.Tag):
tds = tr('td')
ulist.append([tds[0].string, tds[1].string, tds[2].string,tds[3].string,tds[4].string])
def printUnivlist(ulist, num):
with open("中国大学排名.txt",'w+') as f:
tplt="{0:{5}^10}\t{1:{5}^10}\t{2:{5}^10}\t{3:{5}^10}\t{4:{5}^10}"
print(tplt.format("排名", "学校", "省份","学校类型","总分",chr(12288))) #:^10的意思是,限定输出宽度为10,而且右对齐
f.write((tplt+"\n").format("排名", "学校", "省份","学校类型","总分",chr(12288)))
for i in range(num):
u = ulist[i]
f.write((tplt+"\n").format(u[0], u[1], u[2],u[3],u[4],chr(12288)))
print(tplt.format(u[0], u[1], u[2],u[3],u[4],chr(12288)))
print("Suc" + str(num))
def main():
uinfo = []
url = "http://www.zuihaodaxue.com/zuihaodaxuepaiming2020.html"
html = getHtmlText(url)
fillUnivList(uinfo, html)
printUnivlist(uinfo, 40)
main()
效果如下图: