python-爬取中国大学排名网站信息【IndexError:list index out of range】

2021-01-23 07:15

阅读:430

标签:turn   方法   查询   社会   中国   没有   status   需要   不同   

 代码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的方式保存 #查看源代码,大学排行信息包含在,,标签里面 #先解析 的位置 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】

标签:turn   方法   查询   社会   中国   没有   status   需要   不同   

原文地址:https://www.cnblogs.com/Anjoras-bk/p/12884082.html


评论


亲,登录后才可以留言!