>>> import requests
>>> from bs4 import BeautifulSoup
>>> url = "http://www.zgxxb.com.cn/jqtt/201807190013.shtml"
>>> 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):
trs=soup.find_all('tr')
for tr in trs:
tds = tr.find_all('td')
if len(tds)==0:
continue
oneUniv = []
for td in tds:
oneUniv.append(td.string)
allUniv.append(oneUniv)
>>> def printUnivList(num):
print("{:^5}{:^10}{:^8}{:^8}".format("省份","播种面积","总产量","每公顷产量"))
for i in range(num):
u = allUniv[i]
print("{:^5}{:^10}{:^8}{:^8}".format(u[0],eval(u[1]),eval(u[2]),eval(u[3])))
>>> def main(num):
url = 'http://www.zgxxb.com.cn/jqtt/201807190013.shtml'
html = getHtmlText(url)
soup = BeautifulSoup(html, "html.parser")
fillUnivList(soup)
printUnivList(num)
>>> if __name__ == '__main__':
main(30)
Traceback (most recent call last):
File "<pyshell#42>", line 2, in <module>
main(30)
File "<pyshell#38>", line 6, in main
printUnivList(num)
File "<pyshell#30>", line 5, in printUnivList
print("{:^10}{:^10}{:^10}{:^10}".format(u[0],eval(u[1]),eval(u[2]),eval(u[3])))
问题:函数printUnivList下面 u = allUniv[i]数组越界了,allUniv 长度没有30。
解决方式:添加出错处理try...except...或者先判断allUniv长度再取下标。