调试后,关于IndexError: list index out of range的问题

来源:13-9 数据精炼

Pre_Y

2019-02-11

这是我根据老师讲的和熊猫TV现在的HTML写的代码:
`import re
from urllib import request

class Spider():
url = 'https://www.panda.tv/cate/lol?pdt=1.24.s1.3.unl7kqgm1k
root_pattern = '

([\s\S]?)
'
name_pattern = '([\s\S.]?)'
number_pattern = ‘([\s\S.]*?)

# 1
def __fetch_content(self):
    r = request.urlopen(Spider.url)
    htmls = r.read()
    htmls = str(htmls, encoding='utf-8')
    return htmls

# 2
def __analysis(self, htmls):
    root_html = re.findall(Spider.root_pattern, htmls)
    anchors = []
    for html in root_html:
        name = re.findall(Spider.name_pattern, html)
        number = re.findall(Spider.number_pattern, html)
        anchor = {'name':name, 'number':number}
        anchors.append(anchor)
    return anchors

# 3
def __refine(self, anchors):
    l = lambda anchor: {
        'name': anchor['name'][0].strip(),
        'number': anchor['number'][0]
    }
    return map(l, anchors)

def go(self):
    htmls = self.__fetch_content()
    anchors = self.__analysis(htmls)
    result_map = self.__refine(anchors)
    result = list(result_map)
    print(result)

spider = Spider()
spider.go()`

下面贴的是上段代码运行的结果:图片描述

pycharm说的是lambda表达式那块有点问题,
然后我就把__refine(self, anchors)函数单独拿出来修改了一下,
用断点得到anchors的少量数据传到a图片描述结果符合预期
图片描述

老师是什么原因导致这个IndexError: list index out of range?
anchors是没有问题的:图片描述

写回答

3回答

7七月

2019-02-12

这个应该是数组越界,应该是[0]引起的吧?

0
2
Pre_Y
非常感谢!
2019-02-12
共2条回复

Pre_Y

提问者

2019-02-12

总结一下:

1、分析HTML结构很重要

2、断点调试得熟练

3、编译器的报错肯定没问题,这时候就要分析利用断点分析自己的数据是否符合预期

0
0

Pre_Y

提问者

2019-02-12

找到问题了,得到的anchors数据有点问题。

//img.mukewang.com/szimg/5c62485f00017e5a14850325.jpg

007的主播姓名为空,说明之前的正则表达式有问题,没有将主播姓名都筛选到。



0
1
金华爱计算机
那请问应具体怎么改呢
2019-03-28
共1条回复

Python3.8系统入门+进阶 (程序员必备第二语言)

语法精讲/配套练习+思考题/原生爬虫实战

14446 学习 · 4438 问题

查看课程