请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

https://img1.sycdn.imooc.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()

正在回答 回答被采纳积分+3

2回答

萌面小藏獒 2019-02-26 10:21:13

改一下正则表达式就可以


0 回复 有任何疑惑可以回复我~
7七月 2019-02-25 06:55:22

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

0 回复 有任何疑惑可以回复我~
  • 提问者 荣光永存 #1
    谢谢老师回复 但是老师 我一直都没有找出错误的原因 这就是我写的代码了 我不知道为什么他会越界 在数据精炼之前打印出来anchors是没有问题的 您能帮忙调试一下看是错误出在什么地方了吗 我实在是找不出来问题了 感谢老师
    回复 有任何疑惑可以回复我~ 2019-02-25 17:46:33
  • 7七月 回复 提问者 荣光永存 #2
    就是因为老师调试不了啊,没有代码如何调试呢。越界不就是看你anchors有多少个元素?然后你循环取的序号是不是大于anchors里的元素的总数?把变量打印出来不就知道了吗?
    回复 有任何疑惑可以回复我~ 2019-02-26 08:47:36
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信