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,有酬劳。
尽量多打点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的列表中查找第一个不连续的数字