python-爬取中国大学排名网站信息IndexError:list index out of range
Posted Anjora
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-爬取中国大学排名网站信息IndexError:list index out of range相关的知识,希望对你有一定的参考价值。
代码1、2如下
#方法一
import requests from bs4 import BeautifulSoup #对bs4库中的Beautiful类引用 allUniv = []
#获取界面的信息 def getHTMLText(url): try: r = requests.get(url, timeout=30) r.raise_for_status() r.encoding = \'utf-8\' return r.text except: return ""
#将获取的信息中有用的存入列表中 def fillUnivList(soup): data = soup.find_all(\'tr\') for tr in data: ltd = tr.find_all(\'td\') if len(ltd)==0: continue singleUniv = [] for td in ltd: singleUniv.append(td.string) allUniv.append(singleUniv) def printUnivList(num): print("{:^4}{:^10}{:^5}{:^8}{:^10}{:^10}{:^10}".format("排名","学校名称","省市","总分",\\ "人才培养得分","科学研究得分","社会服务得分")) for i in range(num): u=allUniv[i] print("{:^4}{:^10}{:^5}{:^8}{:^10}{:^10}{:^10}".format(u[0],u[1],u[2],u[3],u[4],u[5],u[6])) def main(): url = \'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2015_0.html\' html = getHTMLText(url) soup = BeautifulSoup(html, "html.parser") fillUnivList(soup) printUnivList(310) main()
#方法二
import requests from bs4 import BeautifulSoup #对bs4库中的Beautiful类引用 import bs4 #引入bs4库 #获取界面的信息 def getHTMLText(url) : try: r = requests.get(url,timeout = 30) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: print("获取失败") return \'\' #将获取的信息中有用的存入列表中 def fillUnivlist(ulist,html): soup = BeautifulSoup(html,"html.parser")#html的方式保存 #查看源代码,大学排行信息包含在<tbody>,<tr>,<td>标签里面 #先解析<tbody>的位置 for tr in soup.find(\'tbody\').children: #用isinstance方法检测tr标签,如果tr标签不是bs4库中的Tag类型,过滤 if isinstance(tr,bs4.element.Tag): #查出所有的tr标签后,查出td标签,将所有的td标签存入列表当中 tds = tr(\'td\')
#在列表中增加需要的对应字段,大学排名,大学名称,大学评分 ulist.append([tds[0].string,tds[1].string,tds[2].string,tds[3].string]) pass #打印出获得的的信息 def printUnivlist(ulist,num): #num为自己想要获取大学的数量 #打印表头 print("{:^10}\\t{:^6}\\t{:^10}\\t{:^10}".format("排名","学校名称","省市","总分")) for i in range(num): u = ulist[i] print("{:^10}\\t{:^6}\\t{:^10}\\t{:^10}".format(u[0],u[1],u[2],u[3])) print(\'Suc\'+str(num)) def main(): uinfo=[] #定义一个存放信息的列表 url=\'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2015_0.html\' html = getHTMLText(url) fillUnivlist(uinfo,html) printUnivlist(uinfo,310)#查看310个大学 main()
结果
两种方法爬到排名192就中断了,(左图:提示已经追溯到最后;右图:出现IndexError)
(2015年公布的排位只有192位,没有习题要求的310位)
查询IndexError: 索引错误,列表索引超出范围或出现list[0]
方法一(治标不治本):理论上只要跳过index超出范围,或者出现list[0]的那一行就能解决IndexError,代码如下:
for i in range(num): try: u=allUniv[i] print("{:^4}{:^10}{:^5}{:^8}{:^10}{:^10}{:^10}".format(u[0],u[1],u[2],u[3],u[4],u[5],u[6])) except: continue
结果是在排位192的地方终止,没有Error
方法二(根本解决):查看报错行数,找到出错的list,输出长度,如果有不同的list,分别输出一下list的长度
这!个!我!不!会!我什么时候会了再补坑
以上是关于python-爬取中国大学排名网站信息IndexError:list index out of range的主要内容,如果未能解决你的问题,请参考以下文章