直接给出代码,代码里注释很详细哈
# 从网络上获取大学排序网页的内容,并按一定的格式输出
from bs4 import BeautifulSoup
import bs4
import requests
import xlwt
# 从网络上获取大学排序网页的内容
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标签的类型,如果tr标签的类型不是bs4.element.Tag就过滤掉
if isinstance(tr, bs4.element.Tag):
# 将所有的td标签存为列表类型tds。
tds = tr('td')
# 在ulist中增加相应的列表字段(排名,大学名称,大学总分)
ulist.append([tds[0].string,tds[1].string,tds[4].string])
# 利用数据结构展示并输出就结果
def printUniveList(ulist,num):
workbook = xlwt.Workbook()
sheet1 = workbook.add_sheet('学校top20',cell_overwrite_ok=True)
# 打印表头
''' 其中0 表示第一个填充位置,1 第二个,以此类推
:号后面带填充的字符,只能是一个字符,不指定的话默认是用半角空格填充
/t表示一个tap键
^ 、 < 、 > 分别是居中、左对齐、右对齐,后面带宽度
{:^10}表示居中显示,占10个字符宽度
{1:{3}^10},填充为什么是填充3个,为什么是在1号位填充:
第一,中英文全半角造成不对齐的原因产生在1号位;
第二,分析实例【Python爬取中国前20强大学】前20大学的结果,为排名、大学名称、总分,3个地方需填充,即为3; '''
tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
# format()函数也是一个格式化字符串,chr(12288)中文字符空格填充
print(tplt.format("排名","学校名称","总分",chr(12288)))
biaotou = ['排名','学校','总分']
for i in range(3):
sheet1.write(0,i,biaotou[i])
for i in range(num):
u = ulist[i]
# 打印表的内容
print(tplt.format(u[0],u[1],u[2],chr(12288)))
sheet1.write(i+1, 0, i + 1)
for j in range(1,3):
sheet1.write(i+1, 1, u[1])
sheet1.write(i+1,j,u[2])
workbook.save('top20.xls')
# 主函数
def main():
uinfo=[]
url = "http://www.zuihaodaxue.cn/zuihaodaxuepaiming2020.html"
html =getHTMLText(url)
fillUnivList(uinfo,html)
printUniveList(uinfo,20) # 20所大学的信息
main()