(求助)Python爬虫代码 不知道错在哪里。。。。

>>> 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])))
阅读 1.5k
1 个回答

问题:函数printUnivList下面 u = allUniv[i]数组越界了,allUniv 长度没有30。
解决方式:添加出错处理try...except...或者先判断allUniv长度再取下标。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题