学习笔记:Python爬取2020大学排名
这里需要导入requests库和 bs4库
GetHTMLText(url):爬取页面内容
UnivalsityList(uList,html):解析网页内容,提取关键的排名信息
PrintList(uList,num) 把提取的关键信息打印出来
main() 主函数
我的结果和代码如下:
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:
print("爬取失败")
def UnivalsityList(uList,html):
soup=BeautifulSoup(html,'html.parser') #html.parser 以正常html格式显示html文档
for tr in soup.find('tbody').children: #遍历表格tbody下的tr标签
if isinstance(tr,bs4.element.Tag):
#判断是否为bs4.element.Tag标签类型
tds=tr('td') #获取td标签
u = []
for i in range(5): #把一行tr标签的td内容赋值给列表
u.insert(i,tds[i].string)
uList.append(u) #一行内容的列表增添在总列表后面,uList是一个二维列表
def PrintList(uList,num):
tplt1="{0:{5}^10}\t{1:{5}^10}\t{2:{5}^10}\t{3:{5}^10}\t{4:{5}^10}"
tplt2 = "{0:{5}^10}\t{1:{5}^10}\t{2:{5}^10}\t{3:{5}^10}\t{4:{5}^12}"
#chr(12288)是中文空格,使内容对齐
print(tplt1.format("排名","大学名称","省市","类型","指标得分",chr(12288)))
for i in range(num):
u=uList[i]
print(tplt2.format(u[0],u[1],u[2],u[3],u[4],chr(12288)))
def main():
uinfo=[]
url="http://www.zuihaodaxue.cn/zuihaodaxuepaiming2020.html"
html=GetHTMLText(url)
UnivalsityList(uinfo,html)
PrintList(uinfo,25) #传参,看你需要前多少名学校
if __name__=='__main__':
main()