一.步骤
1.从网络获取大学排名网页内容
2.提取网页内容的信息到合适的数据结构
3.利用数据结构展示并输出结果
4.分析Robot协议
http://www.zuihaodaxue.cn/robots.txt
可知网站对爬虫没有限制;
5.分析网页源代码结构
在要爬取的网页右键查看网页源代码,本人复制到pycharm IDE中,格式化后可见如下;
所有的排名包含在一个tbody标签中,每一个大学以一个tr分隔,每个大学的信息以td组织;有以上信息之后便可以编写如下代码
二.代码
import requests
import bs4
from bs4 import BeautifulSoup
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:
if isinstance(tr,bs4.element.Tag): # 类似type,判断一个类型是否是一个已知的类型
tds = tr('td') # tr.find_all('td')的简写
ulist.append([tds[0].string,tds[1].string,tds[3].string])
def printUnivList(ulist,num): # 利用数据结构展示并输出结果
tplt = "{0:^10}\t{1:{3}^20}\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))) # 采用中文字符的空格填充 chr(12288) # 采用中文字符的空格填充 chr(12288)
def main():
uinfo = []
url = "http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html"
html = getHTMLText(url)
fillUnivList(uinfo,html)
printUnivList(uinfo,num=20)
main()
#