老师 我都是按着您的代码打的 为什么这里会报错? list index out of range?是为什么 数据精炼之前课程视频的没有问题

来源:13-9 数据精炼

荣光永存

2019-02-24

import re
import requests

from urllib import request


class Spider():
   url = 'https://www.panda.tv/cate/lol?pdt=1.c_lol.psbar-ca0.0.4mlne1135jo'
   root_parttern = '<div class="video-info">([\s\S]*?)</div>'
   name_parttern = ' data-level="[0-9]{0,2}"></i>([\s\S]*?)</span>'
   number_parttern = '<i class="ricon ricon-eye"></i>([\s\S]*?)</span>'

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

   def __analysis(self, htmls):
       root_html = re.findall(Spider.root_parttern, htmls)
       anchors = []
       for html in root_html:
           name = re.findall(Spider.name_parttern,html)
           number = re.findall(Spider.number_parttern,html)
           anchor = {'name':name,'number':number}
           anchors.append(anchor)
       return  anchors

http://img.mukewang.com/szimg/5c729d1a000154df19201030.jpg


   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)
       anchors = list(self.__refine(anchors))
       print(anchors)

spider = Spider()
spider.go()

写回答

2回答

萌面小藏獒

2019-02-26

改一下正则表达式就可以


0
1
金华爱计算机
请问怎么改啊,谢谢啦
2019-03-28
共1条回复

7七月

2019-02-25

这个错误是一个list索引越界的问题,简单点说只有3个元素,但是你取了第四个或者第五个元素,这当然会报错。解决问题的方式,还是只能调试,看看抓到的html是什么样子的,正则匹配后是什么样子的?然后来分析解决问题。

0
2
7七月
回复
荣光永存
就是因为老师调试不了啊,没有代码如何调试呢。越界不就是看你anchors有多少个元素?然后你循环取的序号是不是大于anchors里的元素的总数?把变量打印出来不就知道了吗?
2019-02-26
共2条回复

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

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

14446 学习 · 4438 问题

查看课程