最近学了python的爬虫爬取中国大学排名,然后输出格式对不齐真是为难我这个强迫症患者了。所以经过我的一番努力(随便瞎搞),终于!
话不多说,上代码!代码内容有注解。那个chr(12288)指的是按照中文空格缩进。然后tqlt中的{4}是指按照foemat的第5个参数缩进(不知道是不是这样,但我是这么理解的)。如果不做处理,默认按照英文缩进,但我们大中国字和英语占位不一样嘛。
# 打印中国大学排名
from bs4 import BeautifulSoup
import requests
import bs4
import re
def getHTMLText(url): #获得页面信息
try:
r = requests.get(url, timeout = 30) #用request库抓取页面
r.raise_for_status() #判断是否成功抓取页面 返回值为200为成功
r.encoding = r.apparent_encoding #更换格式
return r.text #返回页面文本信息
except:
return "" #若抓取页面有问题返回空值
def fillUnivList(ulist, html): #存取有用信息
soup = BeautifulSoup(html, "html.parser") #用Beautiful库获得页面HTML信息
for tr in soup.find('tbody').children: #找到tbody的子孙tr然后遍历
if isinstance(tr, bs4.element.Tag): #判断是不是标签
tds = tr('td') #在tr标签信息中找到到td标签并且存入tds
ulist.append([tds[0].string,tds[1].string, tds[2].string, tds[3].string]) #把td的内容存入ulist 前四个分别是排名、名称、省份、分数
pass
def printUnivList(ulist, num): #打印信息函数
tqlt = "{0:^10}\t{1:{4}^10}\t{2:{4}^10}\t{3:^10}"
print(tqlt.format("排名","学校名称","省市","分数", chr(12288))) #打印表头 前面是格式 后面是内容
for i in range(num): #循环num次获得学校信
u = ulist[i] #把ulist的内容暂时放入u中
#if(u[2] == "黑龙江"): #筛选黑龙江大学
print(tqlt.format(u[0], u[1], u[2], u[3], chr(12288))) #打印u中的信息
print("Suc" + str(num))
def main():
uinfo = []
url = "http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html" #网址信息
html = getHTMLText(url) #获取页面信息
fillUnivList(uinfo, html) #把html中的信息摘取
printUnivList(uinfo, 20) #打印20个学校排名
main()
这就是运行结果啦啦啦啦是不是很整齐哈哈哈