python-爬取中国大学排名网站信息【IndexError:list index out of range】
2021-01-23 07:15
标签:turn 方法 查询 社会 中国 没有 status 需要 不同 结果 两种方法爬到排名192就中断了,(左图:提示已经追溯到最后;右图:出现IndexError) (2015年公布的排位只有192位,没有习题要求的310位) 查询IndexError: 索引错误,列表索引超出范围或出现list[0] 方法一(治标不治本):理论上只要跳过index超出范围,或者出现list[0]的那一行就能解决IndexError,代码如下: 结果是在排位192的地方终止,没有Error 方法二(根本解决):查看报错行数,找到出错的list,输出长度,如果有不同的list,分别输出一下list的长度 这!个!我!不!会!我什么时候会了再补坑 python-爬取中国大学排名网站信息【IndexError:list index out of range】 标签:turn 方法 查询 社会 中国 没有 status 需要 不同 原文地址:https://www.cnblogs.com/Anjoras-bk/p/12884082.html#方法一
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()
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
上一篇:归并排序算法的实现
文章标题:python-爬取中国大学排名网站信息【IndexError:list index out of range】
文章链接:http://soscw.com/index.php/essay/45802.html