调试后,关于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回答
-
这个应该是数组越界,应该是[0]引起的吧?
022019-02-12 -
Pre_Y
提问者
2019-02-12
总结一下:
1、分析HTML结构很重要
2、断点调试得熟练
3、编译器的报错肯定没问题,这时候就要分析利用断点分析自己的数据是否符合预期
00 -
Pre_Y
提问者
2019-02-12
找到问题了,得到的anchors数据有点问题。
007的主播姓名为空,说明之前的正则表达式有问题,没有将主播姓名都筛选到。
012019-03-28
相似问题