IndexError: list index out of range list超出了?要怎么改?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IndexError: list index out of range list超出了?要怎么改?相关的知识,希望对你有一定的参考价值。

def gethtml(Starturl):
time.sleep(0.5)
page=urllib2.urlopen(Starturl)
html=page.read()
page.close()
return html

def saveHotdata(hotlist,hoturls):
global a
s=""
for data in hotlist:
s=s+data[0]+' '+data[1]+' '+data[2]+' '+data[3]+' '+data[4]+'\n'
f=file('hot'+hoturls[a]+str(time.strftime('%Y-%m-%d',time.localtime(time.time())))+'.txt','w')
f.write(s)
f.close()
a=a+1

def saveInfluencedata(influencelist,influenceurls):
global b
s=""
for data in influencelist:
s=s+data[0]+' '+data[1]+' '+data[2]+' '+data[3]+' '+data[4]+'\n'
f=file('influence'+influenceurls[b+1]+str(time.strftime('%Y-%m-%d',time.localtime(time.time())))+'.txt','w')
f.write(s)
f.close()
b=b+1

def getUrls(html):
reg='<.* href="(.*?)".*</a>\s+<em class="W_vline">'
urls=re.compile(reg).findall(html)
return urls

def getHot(html):
reg='<a action-type="usercard" uid=(.*?) .*>\s+(.*?)\s+</a>\s+</span>\s+</td>\s+<.*>(.*?)</span></td>\s+<.*></a></td>\s+<td><.*><em style="(.*?)"></em></span></td>\s+<.*><span class="certify_zw" title=.*?>(.*?)</span></td>'
hotList=re.compile(reg).findall(html)
return hotList

def getInfluence(html):
reg='<a action-type="usercard" uid=(.*?) .*>\s+(.*?)\s+</a>\s+</span>\s+</td>\s+<.*>(.*?)<.*></em></span></td>\s+<.*></a></td>\s+<td><.*><em style="(.*?)"></em></span></td>\s+<.*><span class="certify_zw" title=.*?>(.*?)</span></td>'
influenceList=re.compile(reg).findall(html)
return influenceList

def hotSpider(url):
html=getHtml(url)
hoturls=getUrls(html)
for i in range(6):
hoturl=r'http://weibo.com/yaochen'+hoturls[i]
print hoturl
html=getHtml(hoturl)
data=getHot(html)
for Data in data:
print Data[0],' ',Data[1],' ',Data[2],' ',Data[3],' ',Data[4]
saveData=saveHotdata(data,hoturls)

def influenceSpider(url):
html=getHtml(url)
influenceurls=getUrls(html)
for i in range(5):
influenceurl=r'http://weibo.com/yaochen'+influenceurls[i+1]
print influenceurl
html=getHtml(influenceurl)
data=getInfluence(html)
for Data in data:
print Data[0],' ',Data[1],' ',Data[2],' ',Data[3],' ',Data[4]
saveData=saveInfluencedata(data,influenceurls)

a=0
b=0
url='http://weibo.com/yaochen'
hotSpider(url)
influenceSpider(url)
准备爬微博数据,可以加Q 867472916,有酬劳。

你好,已经告诉你索引越界,那就去确认报错那行比如data是不是为空,如果为空的话data[0]取值肯定越界,可以这么打印:assert len(data) 确保大于0

尽量多打点log来追踪错误的地方吧,有问题再问,先调试一下!

(*^__^*)温馨提示(*^__^*)
真心希望你能采纳我的回答,如有不明白 ,可以继续追问,若满意,记得及时采纳。追答

在吗?

追问

能不能加Q?

追答

可以

请采纳

3 5 8 1 0 6 7 3 6

参考技术A 如下源码:
# -*- coding: utf-8 -*-

import time
import re
from start.loan import Loan
from scrapy.spider import Spider
from scrapy.selector import Selector

from start.items import LoanItem

class hepaiSpider(Spider):
name = "hepai"
allowed_domains = ["he-pai.cn"]
start_urls = [
"http://www.he-pai.cn/investmentDetail/investmentDetails/index.do"
]

def parse(self, response):
sel = Selector(response)
items = []
loan =Loan()
sites = sel.xpath("//div[@class='tabs_con']")
for site in sites:
item = LoanItem()
item['company_name'] = '合拍在线'
item['title'] = site.xpath("table/tbody/tr/a/text()").extract()[0]
# item['link'] = u'http://www.he-pai.cn' + site.xpath
item['rate'] = site.xpath("table/tbody/tr/td[2]/text()").extract()[0]
item['rate'] = loan.scanNumber(item['rate'],False)
item['amount'] = site.xpath("table/tboday/td[3]/text()").extract()[0]
item['amount'] = loan.scanNumber(item['amount'])
item['public_time'] = site.xpath("table/tbody/td[4]/text()").extract()[0]
item['public_time'] = loan.scanNumber(item['public_time'])
item['process'] = site.xpath("table/tbody/td[5]/div/div[1]/@style").extract()[0]
item['process'] = loan.scanNumber(item['process'])
item['period'] = site.xpath("table/tbody/td[6]/text()").extract()[0]
item['period_type'] = loan.scanNumber(item['period'])
items.append(item)
return items;
这是全部的错误提示

File "/home/yx/sites/scrapy/start/start/spiders/hepai_spider.py", line 26, in parse
item['title'] = site.xpath("table/tbody/tr/a/text()").extract()[0]

exceptions.IndexError: list index out of range

IndexError :Replacement index 1 out of range for positional args tuple

IndexError->索引异常

报错代码

在进行字符串格式化时报错

# 通过列表索引设置参数
my_list = ['单身狗', '20']
print("姓名:0[0], 年龄 0[1]".format(my_list))#正常的
print("姓名:[0], 年龄 [1]".format(my_list))#异常的

我尝试使用这些语句学习*和**的区别,结果刚刚运行就报错了。

异常描述

发生异常: IndexError
Replacement index 1 out of range for positional args tuple
翻译:
位置参数元组的替换索引 1 超出范围
好像是因为参数数量不对等导致的错误

解决

我采取了format的默认格式化的方式来解决这个问题,代码如下

print("姓名:, 年龄 ".format(*my_list))
#输出结果为:姓名:单身狗, 年龄 20

理由:
单星号(*)的用法–>定义函数时使用:将参数以元组(tuple)的形式导入(收集参数)!
如:

def fun(*args):          #*可以接收任意多个
    print(args)           #此处的args又把接收的任意多个数据放为一个整体:元组中

fun(1,2,3,4)
# 输出为:(1, 2, 3, 4)

既然是元组的索引错误,那就用元组的方式导入,当然这个方法需要借助format的默认格式化方式,format的默认格式化不加位置参数

print(''.format('默认格式化'))

当然我的代码比较简单,需要根据自己的代码做出相对应的调整

以上是关于IndexError: list index out of range list超出了?要怎么改?的主要内容,如果未能解决你的问题,请参考以下文章

IndexError: List Index out of range Keras Tokenizer

IndexError: list index out of range 现在我已经改变了文件的读取方式

python-爬取中国大学排名网站信息IndexError:list index out of range

python-爬取中国大学排名网站信息IndexError:list index out of range

关于Python一直提示IndexError: list index out of range是怎么回事?

IndexError: list index out of range ,同时在python的列表中查找第一个不连续的数字